Log4j筆記

工作中用到了日誌記錄,始終沒有去仔細的看過,總結過,最近去搜羅了一些資料看了下,做些總結方便以後複習

開始:首先來些介紹

1、 log4j簡介

log4j是一個開放源碼項目,主要用於日誌控制。一個項目如果需要log4j支持,需要引用log4j-1.2.13.jar。Log4j有三個主要的組件:Logger(日誌寫出器,供程序員輸出日誌信息)、Appender(日誌目的地,把格式化好的日誌信息輸出到指定的地方去)和Layout(日誌格式化器,用來把程序員的loggingrequest格式化成字符串)。

2.直接開始使用

在工程中引入log4j-1.2.13.jar包

 

3.編寫屬性文件(必須的)

這裏採用properties文件格式

log4j.rootLogger=error,A1
#log4j.logger.org.springframework=debug,A2
#log4j.logger.sitech=debug,A2
#//這裏給test這個包下的內容設定了error級別的日誌才進行操作
log4j.logger.test=info,A2//根記錄器

log4j.appender.A1=org.apache.log4j.ConsoleAppender//輸出到控制檯
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%d{MM-dd HH:mm:ss} [%-5p] %c %M %L %x - %m%n

log4j.appender.A2=org.apache.log4j.RollingFileAppender //輸出到文件
#過濾低於設置值的(如這裏設置warn)示
log4j.appender.A2.Threshold=info //過濾器設置
log4j.appender.A2.File=chn.log    //輸出文件到chn.log文件
log4j.appender.A2.Append=true //這裏的意思是寫入文件的方式是追加,也就是不覆蓋以前的文件
log4j.appender.A2.MaxFileSize=2KB //文件達到了2KB後會備份一個文件,然後再往新的文件中寫入
log4j.appender.A2.MaxBackupIndex=4
log4j.appender.A2.layout=org.apache.log4j.PatternLayout //輸出格式
log4j.appender.A2.layout.ConversionPattern=%d{MM-dd HH:mm:ss} [%-5p] %c %M %L %x - %m%n

4.測試類

package test;

import org.apache.log4j.Logger;


public class TestLog4j
{
 Logger  logger = Logger.getLogger(TestLog4j.class);
 public static void main(String[] args)
 {
  TestLog4j  tt = new TestLog4j();
  tt.getMessage();
 }
 
 public  void getMessage(){
  
  logger.info("hello ------info");
  logger.error("error------------");
  logger.fatal("fatal ------fatal");
  
  System.out.println("test------");
 }

}

5.結果

10-19 10:20:05 [INFO ] test.TestLog4j getMessage 17  - hello ------info
10-19 10:20:05 [ERROR] test.TestLog4j getMessage 18  - error------------
10-19 10:20:05 [FATAL] test.TestLog4j getMessage 19  - fatal ------fatal
test------
6.下面是網上找的介紹資料

 

1、 log4j簡介

Log4j是Apache的一個開放源代碼項目,通過使用Log4j,我們可以控制日誌信息輸送的目的地是控制檯、文件、GUI組件、甚至是套接口服務器、NT的事件記錄器、UNIX Syslog守護進程等;我們也可以控制每一條日誌的輸出格式;通過定義每一條日誌信息的級別,我們能夠更加細緻地控制日誌的生成過程。最令人感興趣的就是,這些可以通過一個配置文件來靈活地進行配置,而不需要修改應用的代碼。

 

l2、 log4j配置文件介紹

通常將log4j配置信息放到獨立的properties文件中,在代碼中通過PropertyConfigurator.configure()函數從properties文件中加載配置信息。

配置文件中需要配置的信息如下

(1)Logger

Logger:需要指定的信息包括日誌級別和日誌器名稱。建議只使用四個級別——ERROR、WARN、INFO、DEBUG(優先級從高到低,定義是不區分大小寫)。同一個記錄器可有多個名稱,從而實現多個輸出端。

配置實例:

A:根記錄器對象(根記錄器總是存在;根記錄器沒有名字)

log4j.rootLogger=debug,stdout,ROLLING_FILE

B:指定的logger對象實例

log4j.logger.org=error,stdout,ROLLING_FILE

(2)Appender

定義一個appender的輸出目的地的格式爲:

log4j.appender.appenderName =fully.qualified.name.of.appender.class

log4j提供了以下幾種常用的輸出目的地class:

org.apache.log4j.ConsoleAppender,將日誌信息輸出到控制檯

org.apache.log4j.FileAppender,將日誌信息輸出到一個文件

org.apache.log4j.DailyRollingFileAppender,將日誌信息輸出到一個,並且每天輸出到一個新的日誌文件

org.apache.log4j.RollingFileAppender,將日誌信息輸出到一個文件,通過指定文件的的尺寸,當文件大小到達指定尺寸的時候會自動把文件改名,如名爲example.log的文件會改名爲example.log.1,同時產生一個新的example.log文件。如果新的文件再次達到指定尺寸,又會自動把文件改名爲example.log.2,同時產生一個example.log文件。依此類推,直到example.log.MaxBackupIndex,MaxBackupIndex的值可在配置文件中定義。

org.apache.log4j.WriterAppender,將日誌信息以流格式發送到任意指定的地方。

org.apache.log4j.jdbc.JDBCAppender,通過JDBC把日誌信息輸出到數據庫中。

配置實例:

輸出到控制檯:

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

輸出到文件:

log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender

# tomcat根目錄\logs\bol_logs,如果指定文件夾不存在會自動創建

log4j.appender.ROLLING_FILE.File=../logs/bol_logs/run.log

#新產生的文件爲追加形式

log4j.appender.ROLLING_FILE.Append=true

#每個日誌文件大小的最大值

log4j.appender.ROLLING_FILE.MaxFileSize=1024KB

#最多備份文件數

log4j.appender.ROLLING_FILE.MaxBackupIndex=100

輸出到數據庫:

log4j.appender.JDBC=org.apache.log4j.jdbc.JDBCAppender

log4j.appender.JDBC.BufferSize=1

log4j.appender.JDBC.Driver=oracle.jdbc.driver.OracleDriver

log4j.appender.JDBC.URL=jdbc:oracle:thin:@192.168.100.53:1522:jljf

log4j.appender.JDBC.User=a97

log4j.appender.JDBC.Password=a97

log4j.appender.JDBC.Sql=INSERT INTO LOGGING_TEST(log_date,log_level,location,message) VALUES(to_date('%d{yyyy-MM-dd HH:mm:ss}','YYYY-MM-DDHH24:MI:SS'),'%p','%c','%m')

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

還有一些不常用的appender的配置,見附錄

注意:1:當指定爲RollingFileAppender設置MaxBackupIndex具體作用爲:

1)當example3.log文件的大小超過K時,就把文件改名爲example3.log.1,同時生成一個新的example3.log文件

2)當example3.log文件的大小再次超過1K,又把文件改名爲example3.log.1。但由於此時example3.log.1已存在,則先把example3.log.1更名爲example3.log.2,再把example3.log文件改名爲example3.log.1

3)同理,當example3.log文件的大小再次超過1K,先把example3.log.2文件更名爲example3.log.3,把example3.log.1文件更名爲example3.log.2,再把example3.log文件改名爲example3.log.1

4)當example3.log文件的大小再次超過1K,先把example3.log.2文件更名爲example3.log.3,舊的example3.log.3文件將被覆蓋;把example3.log.1文件更名爲example3.log.2,舊的example3.log.2文件被覆蓋;最後把example3.log文件改名爲example3.log.1並覆蓋掉舊的example3.log.1文件。

注意:2:Repository-wide threshold:

Repository-widethreshold指定的Level的優先級高於Logger本身的Level。語法爲log4j.threshold=[level],level可以爲OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL。也可以使用自定義Level,這時的語法爲log4j.threshold=[level#classname]。默認爲ALL。

依據上面的規則,我們有這樣的結論:如果log4j.threshold=ERROR,LoggerC的Level=DEBUG,這時只有高於等於ERROR的日誌記錄請求會被Logger C處理。

(3)Layout

定義一個appender的佈局模式的格式爲:

log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class

log4j提供了以下幾種常用的佈局模式class:

org.apache.log4j.HTMLLayout,以HTML表格形式佈局

org.apache.log4j.PatternLayout,可以靈活地指定佈局模式

org.apache.log4j.SimpleLayout,包含日誌信息的級別和信息字符串

指定PatternLayout時,必須同時指定的ConversionPattern參數

常用參數的具體含義如下:

%c列出logger名字空間的全稱,如加上{<層數>}表示出從最內層算起的指定層數的名字空間
%X 按MDC(Mapped DiagnosticContext,線程映射表)輸出日誌。通常用於多個客戶端連接同一臺服務器,方便服務器區分是那個客戶端訪問留下來的日誌。
%p 日誌信息級別
%d%d{<日期格式>}:日誌信息產生時間,使用ISO8601定義的日期格式
%C 日誌信息所在地(全限類名)
%m 產生的日誌具體信息
%n輸出日誌信息換行
%F 顯示調用logger的源文件名
%l輸出日誌事件的發生位置,包括類目名、發生的線程,以及在代碼中的行數
%L顯示調用logger的代碼行
%M 顯示調用logger的方法名
%r顯示從程序啓動時到記錄該條日誌時已經經過的毫秒數
%t輸出產生該日誌事件的線程名
%% 顯示一個

注意:%C日誌信息所在地(全限類名)這個參數似乎不好用,在本人接觸過的一個系統中想要用這個參數輸出日誌發生的類,如此配置時log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d- %C:%L - %-5p %C %x - %m%n,在日誌中只輸出了日誌具體信息相當於只有%m有效。

3、 程序中引用

(1)配製文件加載

如果系統加入了spring框架,那麼系統系統時會默認加載log4j.properties,如果要加載指定的屬性文件可以用:

PropertyConfigurator.configure(“c:/log4j.properties");

注意:如果要排除spring日誌的影響,可以改變log4j配置文件的名字或者位置,然後用上面的方式加載。

如果將配置文件改名,但仍需要spring加載,可以在web.xml中配置Log4jConfigListener,具體寫法如下:

<context-param>

<param-name>log4jConfigLocation</param-name>

<param-value>/WEB-INF/log4j.properties</param-value>

</context-param>

<listener>

<listener-class>

org.springframework.web.util.Log4jConfigListener

</listener-class>

</listener>

(2)取得日誌對象

取得根記錄器對象可通過Logger.getRootLogger()函數,要取得非根記錄器可通過Logger.getLogger(String logName)函數。可以指定的類的名字作爲日誌器的名字,其語法如下:

Logger.getLog(Class class)

(3)寫入記錄

寫入不同級別的日誌,其語法如下:

Logger.debug ( Object message ) ;
  Logger.info ( Object message ) ;
  Logger.warn ( Object message ) ;
  Logger.error ( Object message ) ;

日誌記錄的順序是從當前級別 + 更高級別,如果你的級別記錄爲info,則執行warn,error記錄時候也寫入日誌信息。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章