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