用Log4j自動生成日誌(多種方式)輸出到文件、數據庫等

   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了,用它吃力又不討好,何苦呢?

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