log4j的使用

自己正在做的項目中要加入日誌信息!以前也沒專注做過, 我也是個新手!有很多東西要學呀!在網上找了一段時間,也看了很多例子!吸收後將它們融入到自己的項目中!簡單總結下大致的操作過程。
Log4j可以幫助調試(有時候debug是發揮不了作 用的)和分析。記錄程序運行狀態,能夠將錯誤信息及時記錄起來,爲我們維護軟件提供重要的信息來源。軟件做好後,佈置到時客戶需要的場所。我們不可能派一個人整天監視軟件的運行狀態。一旦軟件出現錯誤,怎麼辦?如果有的錯誤比較特殊,它幾年、幾十年只出現一次。你怎麼辦?有了log4j就能夠把軟件運行過程中,出現的異常信息完整的記錄下!並且可以將錯誤信息,作爲郵件發送到指定郵箱。或者做爲短信發送給指定的程序員。使他們能夠在最短時間內,得到錯誤信息。並作出相應解決方案。使用戶的損失降到最低。
[b]一、操作過程:[/b]
[b] 1.導入相應的.jar。[/b]
要在自己的程序中使用Log4j,首先需要將commons-logging.jar和logging-log4j-log4j-1.2.15.jar導入到構建路徑中。然後再將log4j.properties放到src根目錄下。這樣就可以在程序中使用log4j了.
[b]2.配置log4j的屬性文件。[/b]
Log4j支持兩種格式的配置文件:XML格式和Java的property格式,本人更喜歡後者。


log4j.rootLogger=debug,file
分成四個文件夾來記錄不同類的日誌信息!便於查閱!
//com.iusesoft包下的信息,debug記錄信息的級別
log4j.logger.com.iusesoft=debug,iusersoft
//com.iusesfot.project
log4j.logger.com.iusesoft.project=debug,project
//com.iusesoft.system
log4j.logger.com.iusesoft.system=debug,system
//com.iusesoft.contract
log4j.logger.com.iusesoft.contract=debug,contract

//輸出到控制檯的信息
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
//輸出樣式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n


#file//記錄整個系統的信息。//文件日誌文件信息都是每天產生一個
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/log/file/file
log4j.appender.iusersoft.DatePattern= yyyy-MM-dd'.log'
#指定日誌記錄的級別
#log4j.appender.file.Threshold=INFO
#log4j.appender.file.append=true
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

#iusesoft
log4j.appender.iusersoft=org.apache.log4j.DailyRollingFileAppender
log4j.appender.iusersoft.File=/log/iusersoft/iusersoft
#log4j.appender.iusersoft.Threshold=INFO
#log4j.appender.iusersoft.append=true
log4j.appender.iusersoft.layout=org.apache.log4j.PatternLayout
log4j.appender.iusersoft.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

#project
log4j.appender.project=org.apache.log4j.DailyRollingFileAppender
log4j.appender.project.File=/log/project/project
log4j.appender.project.DatePattern= yyyy-MM-dd'.log'

#log4j.appender.project.Threshold=INFO
#log4j.appender.project.append=true
log4j.appender.project.layout=org.apache.log4j.PatternLayout
log4j.appender.project.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

#system
log4j.appender.system=org.apache.log4j.DailyRollingFileAppender
log4j.appender.system.File=/log/system/system
log4j.appender.system.DatePattern=yyyy-MM-dd'.log'
log4j.appender.system.Threshold=INFO
#log4j.appender.system.append=true
log4j.appender.system.layout=org.apache.log4j.PatternLayout
log4j.appender.system.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

#contract
log4j.appender.contract=org.apache.log4j.DailyRollingFileAppender
log4j.appender.contract.File=/log/contract/contract
log4j.appender.contract.DatePattern= yyyy-MM-dd'.log'
#log4j.appender.contract.Threshold=INFO
#log4j.appender.contract.append=true
log4j.appender.contract.layout=org.apache.log4j.PatternLayout
log4j.appender.contract.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%-5p][%c{1}] - %m%n

[b]二、代碼分析[/b]
Log4j中有三個主要的組件,它們分別是 Logger、Appender和Layout,Log4j 允許開發人員定義多個Logger,每個Logger擁有自己的名字,Logger之間通過名字來表明隸屬關係。有一個Logger稱爲Root,它永遠存在,且不能通過名字檢索或引用,可以通過Logger.getRootLogger()方法獲得,其它Logger通過 Logger.getLogger(String name)方法。
Appender則是用來指明將所有的log信息存放到什麼地方,Log4j中支持多種appender,如 console、files、GUI components、NT Event Loggers等,一個Logger可以擁有多個Appender,也就是你既可以將Log信息輸出到屏幕,同時存儲到一個文件中。
Layout的作用是控制Log信息的輸出方式,也就是格式化輸出的信息。

Log4j中將要輸出的Log信息定義了5種級別,依次爲DEBUG、INFO、WARN、ERROR和FATAL,當輸出時,只有級別高過配置中規定的級別的信息才能真正的輸出,這樣就很方便的來配置不同情況下要輸出的內容,而不需要更改代碼,這點實在是方便啊。

Log4j建議只使用四個級別,優先級從高到低分別是ERROR、WARN、INFO、DEBUG。通過在這裏定義的級別,您可以控制到應用程序中相應級別的日誌信息的開關。指定輸出只顯示比該級別以上的信息,所有比該級別低的信息都不會被顯示。比如在這裏定義了INFO級別,則應用程序中所有DEBUG級別的日誌信息將不被打印出來。

主要包括三個方面:1.設置出錯的等級2.輸出目的地 3.輸出樣式。

首先,是設置root,格式爲 log4j.rootLogger=[level],appenderName, ...,其中level就是設置需要輸出信息的級別,後面是appender的輸出的目的地,appenderName就是指定日誌信息輸出到哪個地方。您可以同時指定多個輸出目的地。 配置日誌信息輸出目的地Appender,其語法爲
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
...
log4j.appender.appenderName.option = valueN
Log4j提供的appender有以下幾種:
org.apache.log4j.ConsoleAppender(控制檯)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天產生一個日誌文件)
org.apache.log4j.RollingFileAppender(文件大小到達指定尺寸的時候產生新文件)
org.apache.log4j.WriterAppender(將日誌信息以流格式發送到任意指定的地方)
配置日誌信息的格式(佈局),其語法爲:
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
....
log4j.appender.appenderName.layout.option = valueN
Log4j提供的layout有以下幾種:
org.apache.log4j.HTMLLayout(以HTML表格形式佈局),
org.apache.log4j.PatternLayout(可以靈活地指定佈局模式),
org.apache.log4j.SimpleLayout(包含日誌信息的級別和信息字符串),
org.apache.log4j.TTCCLayout(包含日誌產生的時間、線程、類別等等信息)

Log4J採用類似C語言中的printf函數的打印格式格式化日誌信息,打印參數如下: %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 輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數。舉例:customerAction(customerAction.java:100)
4、Log4j在程序中的使用
要在自己的程序中使用Log4j,首先需要將commons-logging.jar和logging-log4j-1.2.9.jar導入到構建路徑中。然後再將log4j.properties放到src根目錄下。這樣就可以在程序中使用log4j了。在類中使用log4j, 首先聲明一個靜態變量 Logger logger=Logger.getLog("classname");現在就可以使用了,用法如下:logger.debug("debug message")或者logger.info("info message"),看下面一個[b]小例子: [/b]
import com.foo.Bar;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
public class customerBizImpl {
//括號中的參數是類的名字。在哪個類中加入,就寫上哪個類的名字!
private Logger logger = Logger.getLogger(customerBizImpl.getName());
public void addCustomer(Customer customer){
try{
customerDao.add(customer);
}catch(Exception ex){
ex.printStackTrace();
//手動將錯誤信息記錄到日誌文件中
logger.error("出錯了!",ex);
/********
也可換成下面的信息按顯示級別顯示日誌信息

logger.debug(String log_info);

用於顯示調試信息

logger.info (String log_info);

用於顯示系統提示信息

logger.warn(String log_info);

用於顯示警告或特殊提示

logger.error(String log_info);
*********/
}
}

[b]三、注意事項:[/b]
我寫的文件是每天產生一個。如果你今天沒有錯誤信息記錄,那第二天就不會產生新的文件 。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章