Logback日誌系統配置攻略

logback是log4j做者推出的新日誌系統,原生支持slf4j通用日誌api,容許平滑切換日誌系統,而且對簡化應用部署中日誌處理的工做作了有益的封裝。html

官方地址爲:http://logback.qos.ch/java

 

Logback日誌須要依賴一下jar包:mysql

slf4j-api-1.6.0.jarlinux

logback-core-0.9.21.jarsql

logback-classic-0.9.21.jar數據庫

logback-access-0.9.21.jarapi

 

主配置文件爲logback.xml,放在src目錄下或是WEB-INF/classes下,logback會自動加載app

logback.xml的基本結構以下:flex

1 <?xml version="1.0" encoding="UTF-8"?>  
2 <configuration>  
3 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
4     <encoder>  
5       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
6     </encoder>  
7   </appender>  
8   <root level="DEBUG"><appender-ref ref="STDOUT" /></root>  
9 </configuration>  

logback.xml的基本配置信息都包含在configuration標籤中,須要含有至少一個appender標籤用於指定日誌輸出方式和輸出格式,root標籤爲系統默認日誌進程,經過level指定日誌級別,經過appender-ref關聯前面指定頂的日誌輸出方式。ui

例子中的appender使用的是ch.qos.logback.core.ConsoleAppender類,用於對控制檯進行日誌輸出

其中encoder標籤指定日誌輸出格式爲「時間 線程 級別 類路徑 信息」

logback的文件日誌輸出方式還提供多種日誌分包策略

 

1.文件日誌

 1 <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">  
 2     <file>E:/logs/mylog.txt</file>  
 3     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
 4       <!-- rollover daily -->  
 5       <fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>  
 6       <maxHistory>5</maxHistory>   
 7       <timeBasedFileNamingAndTriggeringPolicy  
 8             class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
 9         <!-- or whenever the file size reaches 100MB -->  
10         <maxFileSize>100MB</maxFileSize>  
11       </timeBasedFileNamingAndTriggeringPolicy>  
12     </rollingPolicy>  
13     <encoder>  
14       <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  
15     </encoder>  
16   </appender  

文件日誌輸出採用的ch.qos.logback.core.rolling.RollingFileAppender類,它的基本屬性包括<file>指定輸入文件路徑,encoder指定日誌格式。其中,rollingPolicy標籤指定的是日誌分包策略,ch.qos.logback.core.rolling.TimeBasedRollingPolicy類實現的是基於時間的分包策略,分包間隔是根據fileNamePattern中指定的事件最小單位,好比例子中的%d{yyyy-MM-dd_HH-mm}的最小事件單位爲分,它的觸發方式就是1分鐘,策略在每次想日誌中添加新內容時觸發,若是知足條件,就將mylog.txt複製到E:/logs/目錄並改名爲mylog-2010-06-22_13-13.1.log,並刪除原mylog.txt。maxHistory的值爲指定E:/logs目錄下存在的相似mylog-2010-06-22_13-13.1.log文件的最大個數,當超過期會刪除最先的文件。此外,策略還能夠互相嵌套,好比本例中在時間策略中又嵌套了文件大小策略,ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP實現對單文件大小的判斷,當超過maxFileSize中指定大大小時,文件名中的變量%i會加一,即在不知足時間觸發且知足大小觸發時,會生成mylog-2010-06-22_13-13.1.log和mylog-2010-06-22_13-13.2.log兩個文件。

 

2.數據庫日誌

 

 1 <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">  
 2     <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
 3        <dataSource  
 4         class="com.mchange.v2.c3p0.ComboPooledDataSource">  
 5       <driverClass>com.<a href="http://lib.csdn.net/base/mysql" class='replace_word' title="MySQL知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>MySQL</a>.jdbc.Driver</driverClass>  
 6       <url>jdbc:mysql://127.0.0.1:3306/databaseName</url>  
 7       <user>root</user>  
 8       <password>root</password>  
 9       </dataSource>  
10     </connectionSource>  
11   </appender>  

數據庫輸出使用ch.qos.logback.classic.db.DBAppender類,數據源支持c3p0數據鏈接池,例子中使用的MySql,其餘配置方式請參考官方文檔。

使用數據庫輸出須要在數據庫中創建3個表,建表腳本以下

 1 # Logback: the reliable, generic, fast and flexible logging framework.  
 2 # Copyright (C) 1999-2010, QOS.ch. All rights reserved.  
 3 #  
 4 # See http://logback.qos.ch/license.html for the applicable licensing   
 5 # conditions.  
 6 # This SQL script creates the required tables by ch.qos.logback.classic.db.DBAppender.  
 7 #  
 8 # It is intended for MySQL databases. It has been tested on MySQL 5.1.37   
 9 # on <a href="http://lib.csdn.net/base/linux" class='replace_word' title="Linux知識庫" target='_blank' style='color:#df3434; font-weight:bold;'>Linux</a>  
10   
11 BEGIN;  
12 DROP TABLE IF EXISTS logging_event_property;  
13 DROP TABLE IF EXISTS logging_event_exception;  
14 DROP TABLE IF EXISTS logging_event;  
15 COMMIT;  
16   
17 BEGIN;  
18 CREATE TABLE logging_event   
19   (  
20     timestmp         BIGINT NOT NULL,  
21     formatted_message  TEXT NOT NULL,  
22     logger_name       VARCHAR(254) NOT NULL,  
23     level_string      VARCHAR(254) NOT NULL,  
24     thread_name       VARCHAR(254),  
25     reference_flag    SMALLINT,  
26     arg0              VARCHAR(254),  
27     arg1              VARCHAR(254),  
28     arg2              VARCHAR(254),  
29     arg3              VARCHAR(254),  
30     caller_filename   VARCHAR(254) NOT NULL,  
31     caller_class      VARCHAR(254) NOT NULL,  
32     caller_method     VARCHAR(254) NOT NULL,  
33     caller_line       CHAR(4) NOT NULL,  
34     event_id          BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY  
35   );  
36 COMMIT;  
37 BEGIN;  
38 CREATE TABLE logging_event_property  
39   (  
40     event_id          BIGINT NOT NULL,  
41     mapped_key        VARCHAR(254) NOT NULL,  
42     mapped_value      TEXT,  
43     PRIMARY KEY(event_id, mapped_key),  
44     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)  
45   );  
46 COMMIT;  
47 BEGIN;  
48 CREATE TABLE logging_event_exception  
49   (  
50     event_id         BIGINT NOT NULL,  
51     i                SMALLINT NOT NULL,  
52     trace_line       VARCHAR(254) NOT NULL,  
53     PRIMARY KEY(event_id, i),  
54     FOREIGN KEY (event_id) REFERENCES logging_event(event_id)  
55   );  
56 COMMIT;  

3.其餘

此外logback還提供基於mail,基於jmx等多種日誌輸出方式,你也能夠經過繼承ch.qos.logback.core.AppenderBase本身寫appender實現

 

除了使用默認的日誌主線程<root>外,還能夠經過<logger>標籤訂製其餘日誌線程如:

   

1 <logger name="com.test" level="DEBUG">  
2         <appender-ref ref="STDOUT" />  
3 </logger>  

其中name指定線程針對的包路徑,level是日誌級別,<appender-ref>定義使用那種appender。

例如要實現打印jdbc提交的sql,能夠加入以下logger:

1 <logger name="Java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>

完整的logback.xml

 1 <?xml version="1.0" encoding="UTF-8"?>  
 2 <configuration>  
 3   <!-- log output to file  -->  
 4   <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">  
 5     <file>E:/logs/mylog.txt</file>  
 6     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
 7       <!-- rollover daily -->  
 8       <fileNamePattern>E:/logs/mylog-%d{yyyy-MM-dd_HH-mm}.%i.log</fileNamePattern>  
 9       <maxHistory>5</maxHistory>   
10       <timeBasedFileNamingAndTriggeringPolicy  
11             class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
12         <!-- or whenever the file size reaches 100MB -->  
13         <maxFileSize>100MB</maxFileSize>  
14       </timeBasedFileNamingAndTriggeringPolicy>  
15     </rollingPolicy>  
16     <encoder>  
17       <pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern>  
18     </encoder>  
19   </appender>  
20 <!-- log output to console  -->  
21 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
22     <encoder>  
23       <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>  
24     </encoder>  
25   </appender>  
26 <!--  log output to db-->  
27 <appender name="DB" class="ch.qos.logback.classic.db.DBAppender">  
28     <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">  
29        <dataSource  
30         class="com.mchange.v2.c3p0.ComboPooledDataSource">  
31       <driverClass>com.mysql.jdbc.Driver</driverClass>  
32       <url>jdbc:mysql://127.0.0.1:3306/tunneldb</url>  
33       <user>root</user>  
34       <password>123123</password>  
35       </dataSource>  
36     </connectionSource>  
37   </appender>  
38   
39     <logger name="com.ttt.ttt" level="DEBUG">  
40         <appender-ref ref="STDOUT" />  
41     </logger>  
42    
43     <logger name="java.sql.Connection" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
44      <!--  打印sql  
45     <logger name="java.sql.Statement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
46     <logger name="java.sql.PreparedStatement" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
47       
48     <logger name="java.sql.ResultSet" level="DEBUG"><appender-ref ref="STDOUT" /></logger>  
49     -->  
50   <root level="DEBUG"><appender-ref ref="ROLLING" /></root>  
51 </configuration>  

總結:logback提供了豐富而高效的日誌輸出方式,並經過滾動策略,將實施時複雜的備份策略整合,極大的簡化的部署成本,有興趣的朋友可已考慮放到本身的項目裏.官方提供了幾百頁的文檔,內容至關詳細,更多的內容請參照官方文檔。

原文:http://blog.csdn.net/jiaincs/article/details/5686287

相關文章
相關標籤/搜索