Log4j是Apache基金會的一個項目,它能為Java開發著提供功能強大使用方便的各種日志處理.當然它的版本不限于Java,還有C/C++等主流語言.我覺得它就象一把非常實用的鋒利小刀,讓我們的寫程序時更加如魚得水.

         Log4j輸出的信息分如下幾類:ALL,DEBUG,INFO,ERROR,FATAL,級別從低到高,輸出的內容是從多到少.從字面意思即可看出大概,ALL指輸出所有信息;DEBUG指調試信息;INFO指一般信息;ERROR指錯誤信息;FATAL指致命的錯誤信息。

       輸出的信息級別和內容我們可以在程序里面設置,但缺點就不夠靈活,并且無法在程序運行期間進行參數調整。通過XML或Property配置文件可以在外部控制Logger的輸出,原理都一樣的,只是表現形式不一樣,看個人的習慣了。下面主要講一下如何使用Property文件來靈活配置Log4j的輸出。

       在Log4j中你可以讓信息輸出到控制臺(Console)、文件、遠程數據數等中的其中一個或多個當中。 

      首先我們要先聲明信息輸出的級別,并且 為了能把信息輸出到指定的目的地,我們要指定輸出方案,如下所示:

    log4j.rootLogger = DEBUG, A1,A4

   DEBUG為輸出信息的級別,A1,A4分別為輸出方案的名稱,下面我們來定義方案的具體參數。

    指定該輸出方案的信息輸出目的地為控制臺:

     log4j.appender.A1 = org.apache.log4j.ConsoleAppender

     設定輸出的布局為模式布局:
     log4j.appender.A1.layout = org.apache.log4j.PatternLayout

    指定模式的具體參數:
    log4j.appender.A1.layout.ConversionPattern =[%d{HH:mm:ss}] [%t] %-5p - %m %n

    每個參數前要加%來說明,其中:

    %d:日期(date),如:yyyy-MM-dd,yyyy-MM-dd HH:mm:ss等

    %t:線程名稱(Thread)

     %-5p:信息優先級(Priority),寬度為5,左對齊。如DEBUG,FATAL等

      %m:輸出信息(Message)

      %n:回車換行

       還有其它幾個象%c,%C,%F等

     上面的方案A1指的是把信息輸出到控制臺,并且輸出的格式按指定的格式輸出。

      我們還可以指定把信息輸出到文件當中,如下為普通文件輸出方案:

     log4j.appender.A2 = org.apache.log4j.RollingFileAppender
     log4j.appender.A2.File = logs\\test.log
     log4j.appender.A2.MaxFileSize = 1MB
     log4j.appender.A2.MaxBackupIndex = 3
     log4j.appender.A2.layout = org.apache.log4j.PatternLayout
     log4j.appender.A2.layout.ConversionPattern =[%d] %-4r [%t] %-5p %c %x - %m %n

     輸出指定的文件test.log當中,并且指定該文件最大不超過1MB,超過之后將清除后再寫入。當然也可以直接用FileAppender,不進行Rolling,那么所以的日志信息都將追加到原信息的后面。MaxBackupIndex指的是最大備份數目。以上面文件為例,當test.log到達1MB,則它直接被修改成test.log.1,如果這個文件已存在,則修改為test.log.2,直到MaxBackupIndex。新的日志信息,將重新生成文件test.log。當下一次達到1MB時,此時test.log.1,test.log.2,test.log.3都已存在,則直接把test.log.3刪除,把test.log修改成test.log.3。

      把信息輸出到遠程數據庫當中:

     # 定義A3輸出到數據庫
     log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
     log4j.appender.A3.BufferSize = 40
     log4j.appender.A3.Driver = sun.jdbc.odbc.JdbcOdbcDriver
     log4j.appender.A3.URL = jdbc:ODBC:driver={Microsoft Access Driver (*.mdb)};DBQ=MobileDB.mdb
     log4j.appender.A3.User = 
     log4j.appender.A3.Password = 
     log4j.appender.A3.layout = org.apache.log4j.PatternLayout
     log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j(createDate, thread, priority, category, message) values('%d', '%t', '%-5p', '%c', '%m')

     指定輸出方案為JDBCAppender,即能過JDBC把日志自動寫入到遠程數據庫當中。BufferSize指定緩沖區的大小,當輸出內容達到緩沖區的大小時,就把數據寫入數據庫一次。下面的參數依次為指暄數據庫驅動名稱、數據庫URL地址、數據庫登錄用戶名和密碼,模式布局和Select語句。
     

    我們也可以把信息輸出到HTML文件當中,并且是按時間段自動生成文件,比如,每隔一個小時或一天、半天生成一個HTML文件:

     log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender
     log4j.appender.A4.File = logs\\log.html
     log4j.appender.A4.DatePattern='.'yyyy-MM-dd-HH'.html'
     log4j.appender.A4.layout = org.apache.log4j.HTMLLayout

     第一個參數為指定輸出方案為按日期滾動的文件方案。第二個參數指定文件名,第三個指定日期模式,最后一個指定布局為HTML布局。上面的設置會每隔一個小時產生一個HTML文件名,文件名為:log.html.2006-03-24-08.html的樣子。
   

      完整的配置文件log4j.properties如下:

     log4j.rootLogger = DEBUG, A1,A4

     log4j.appender.A1 = org.apache.log4j.ConsoleAppender
     log4j.appender.A1.layout = org.apache.log4j.PatternLayout
     log4j.appender.A1.layout.ConversionPattern =[%d{HH:mm:ss}] [%t] %-5p - %m %n


     log4j.appender.A2 = org.apache.log4j.RollingFileAppender
     log4j.appender.A2.File = logs\\test.log
     log4j.appender.A2.MaxFileSize = 1KB
     log4j.appender.A2.MaxBackupIndex = 3
     log4j.appender.A2.layout = org.apache.log4j.PatternLayout
     log4j.appender.A2.layout.ConversionPattern =[%d] %-4r [%t] %-5p %c %x - %m %n

     #11區 定義A3輸出到數據庫
     log4j.appender.A3 = org.apache.log4j.jdbc.JDBCAppender
     log4j.appender.A3.BufferSize = 40
     log4j.appender.A3.Driver = sun.jdbc.odbc.JdbcOdbcDriver
     log4j.appender.A3.URL = jdbc:ODBC:driver={Microsoft Access Driver (*.mdb)};DBQ=MobileDB.mdb
     log4j.appender.A3.User = 
     log4j.appender.A3.Password = 
     log4j.appender.A3.layout = org.apache.log4j.PatternLayout
     log4j.appender.A3.layout.ConversionPattern = INSERT INTO log4j(createDate, thread, priority, category, message) values('%d', '%t', '%-5p', '%c', '%m')


     log4j.appender.A4 = org.apache.log4j.DailyRollingFileAppender
     log4j.appender.A4.File = logs\\log.html
     log4j.appender.A4.DatePattern='.'yyyy-MM-dd-HH'.html'
     log4j.appender.A4.layout = org.apache.log4j.HTMLLayout

 

     在程序里面只需聲明使用Property配置文件來控制輸出就行了,如下所示:

    static Logger logger = Logger.getLogger(DHMain.class);

     public static void main(String[] args) {
          PropertyConfigurator.configure("conf\\log4j.properties");
          logger.debug("啟動..." );

     }

    有了Log4j,我們完全可以拋棄System.out了,用它吃力又不討好,何苦呢?



ExtJS教程- Hibernate教程-Struts2 教程-Lucene教程