java log4j 异常,JAVA中的異常處理及日志(log4j為例)的使用

Java的異常

1.Java中所有異常和錯誤的基類:Throwable

Throwable

error        Exception

(檢查時異常)(運行時異常)

RuntimeException

2.Java中的異常分為運行時異常和檢查時異常

運行時異常是表示RuntimeException以及所有子類,這些異常無需再程序中捕獲,大多可以通過代碼進行控制避免

檢查時異常:除了RuntimeException以及其所有子類之外的所有異常,這些異常必須在程序中進行捕獲處理。

異常的第一種處理機制——使用try-catch進行異常捕獲

1.使用try塊包裹可能出現異常的代碼,使用多個catch塊進行不同異常的處理

當try塊中的程序出現異常時,將進入對應的catch塊進行操作,而不再執行try塊中的代碼

使用try—catch捕獲異常后,如果程序出現異常,將不會阻斷程序的運行

2。catch塊可以有多個,一般最后用catch(Exception e)收尾,表示捕獲所有異常

但多個catch塊順序必須由小到大

3.e.getMessage():拿到錯誤信息

e.printStackTrace(); 打印堆棧信息

4.try catch結構如果需要確保程序不被中斷,必須確保程序塊可以捕獲程序中可能出現的所有異常(最后用catch(Exception e)收尾)

5.finally表示無論程序是否出現異常,都必須執行的語句,即便try塊中有return語句也必須執行完finally才能結束當前方法。

但是使用System.exit(0); 退出程序,將不再執行finally的語句

所以,finally通常用於進行流的關閉,資源釋放等操作

6.try-finally可以組合存在,而不一定必須包含catch

表示出現異常不進行操作,但是finally中的代碼必須執行

異常的第二種處理機制——拋出機制

1.在方法體中如果出現異常,可以不用try-catch捕獲,而使用throws在方法聲明上進行拋出

拋出后,在調用方法的地方進行拋出,如果捕獲可以繼續拋出

原則上,main方法中必須進行異常處理,如果繼續拋出將會導致程序出現異常而無法發現

2.throws如果拋出多個異常,可以使用逗號分隔

3.throw 在程序中手動拋出異常

throw new IOException("輸入年齡不合法");

4.如果使用throw拋出的是一個檢查型異常,那必須在方法體上使用throws進行拋出聲明

如果使用throw拋出的是一個運行時異常,那么不必再使用throws進行拋出聲明。

實例代碼:

try{

setAge(110);

}catch(IOException e) {

e.printStackTrace();

}public static void setAge(int i) throwsIOException{if(i<0||i>100){throw new IOException("輸入年齡不合法");

}

}

如何自定義異常類

自定義異常類,必須繼承現有異常類。

通常繼承Exception或者RuntimeException,分別表示聲明了一個檢查時異常和一個運行時異常。

實例代碼:

class AgeException extendsException{private String message=null;publicAgeException(){

}publicAgeException(String message){this.message=message;

}publicString getMessage(){returnmessage;

}

}class AgeRuntimeException extendsRuntimeException{private String message=null;publicAgeRuntimeException(){

}publicAgeRuntimeException(String message){this.message=message;

}publicString getMessage(){returnmessage;

}

}

log4j的使用

1.導入log4j-1.2.17.jar

2.在src目錄同級下,創建log4j.properties配置文件

3.在需要打印日志的類中通過Logger.getLogger()拿到一個日志對象,參數傳入本類.class

4.使用日志對象,分別調用不同級別的打印語句進行日志的輸出!

log.debug("打印一條debug信息");

log.info("打印一條info信息");

log.warn("打印一條warn信息");

log.error("打印一條error信息");

log4j的配置文件log4j.properties

#log4j.rootLogger 表示根配置。

#log4j.rootLogger=[ level ] , appenderName1 , appenderName2

#level 表示可以寫入日志的級別:

#ERROR> WARN > INFO >DEBUG

#設置info 表示級別大於info的都可以進行日志輸出

# 級別后面的多個選項,表示多個適配器的名字,適配器的名字可以隨便起

log4j.rootLogger=info, logfile,A,B

# 進行各個適配器的配置。 log4j.appender.適配器名字

#[為Appender指定日志輸出目的地]

#org.apache.log4j.ConsoleAppender(控制台),

#org.apache.log4j.FileAppender(文件),

#org.apache.log4j.DailyRollingFileAppender(每天產生一個日志文件),

#org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生一個新的文件)

log4j.appender.A=org.apache.log4j.ConsoleAppender

# 設置控制台打印的語句。 System.out/System.err

log4j.appender.A.Target=System.err

# 使用哪種布局進行日志顯示:

# org.apache.log4j.HTMLLayout(以HTML表格形式布局),

# org.apache.log4j.PatternLayout(可以靈活地指定布局模式),

# org.apache.log4j.SimpleLayout(包含日志信息的級別和信息字符串),

#org.apache.log4j.TTCCLayout(包含日志產生的時間、線程、類別等等信息)

log4j.appender.A.layout=org.apache.log4j.SimpleLayout

log4j.appender.logfile=org.apache.log4j.FileAppender

# 設置文件的地址

log4j.appender.logfile.File=mylog.log

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

# 為PatternLayout進行樣式的設置。

#%m 輸出代碼中指定的消息

#%p 輸出優先級,即DEBUG,INFO,WARN,ERROR,FATAL

#%r 輸出自應用啟動到輸出該log信息耗費的毫秒數

#%c 輸出所屬的類目,通常就是所在類的全名

#%t 輸出產生該日志事件的線程名

#%n 輸出一個回車換行符,Windows平台為“\r\n”,Unix平台為“\n”

#%d 輸出日志時間點的日期或時間,默認格式為ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},輸出類似:2002年10月18日 22 : 10 : 28 , 921#%l 輸出日志事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:Testlog4.main(TestLog4.java: 10)

log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

# 為當前適配器,指定單獨的級別,可以覆蓋rootLogger的配置

log4j.appender.logfile.Threshold=warn

# 表示寫入新日志時,是否清空日志文件;false表示清空原文件,true表示在原文件后面追加新日志

log4j.appender.logfile.Append= false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值