logback配置
Logback是由log4j創始人設計的又一個開源日誌組件。logback當前分成三個模塊:logback-core,logback- classic和logback-access。logback-core是其它兩個模塊的基礎模塊。logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你可以很方便地更換成其它日誌系統如log4j或JDK14 Logging。logback-access訪問模塊與Servlet容器集成提供通過Http來訪問日誌的功能。
一、LogBack、Slf4j和Log4j之間的關系
Slf4j是The Simple Logging Facade for Java的簡稱,是一個簡單日誌門面抽象框架,它本身只提供了日誌Facade API和一個簡單的日誌類實現,一般常配合Log4j,LogBack,java.util.logging使用。Slf4j作為應用層的Log接入時,程序可以根據實際應用場景動態調整底層的日誌實現框架(Log4j/LogBack/JdkLog…)
LogBack和Log4j都是開源日記工具庫,LogBack是Log4j的改良版本,比Log4j擁有更多的特性,同時也帶來很大性能提升。
LogBack官方建議配合Slf4j使用,這樣可以靈活地替換底層日誌框架。
二、 LogBack的結構
LogBack被分為3個組件,logback-core, logback-classic 和 logback-access。
其中logback-core提供了LogBack的核心功能,是另外兩個組件的基礎。
logback-classic則實現了Slf4j的API,所以當想配合Slf4j使用時,需要將logback-classic加入classpath。
logback-access是為了集成Servlet環境而準備的,可提供HTTP-access的日誌接口。
三、LogBack配置
<?xml version="1.0" encoding="utf-8" standalone="no"?> <!--scan="true":配置文件若發生改變,會自動重新加載配置問價 scanPeriod="60 seconds" :當scan為true時,此屬性生效。60 seconds表示每分鐘掃描配置文件看看是否有變化 debug="false":若為true,將會打印logback內部的日誌信息 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 定義四個全局變量 --> <!-- logback日誌級別(從小到大):TRACE<DEBAGE<INFO<WARN<ERROR --> <property name="log.level" value="debug"/> <!-- 日誌級別 --> <property name="log.maxHistory" value="30"/> <!-- 最大的歷史保留時間,這裏為30天 --> <property name="log.filePath" value="${catalina.base}/logs/webapps"/> <!-- 日誌存儲的根路徑 --> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%thread]%-5level%logger{50}-%msg%n"/> <!-- 日誌展現的格式 --> <!-- %d{yyyy-MM-dd HH:mm:ss.SSS}:時間格式 [%thread]:程序是由哪一個線程執行的 %-5level:顯示日誌界別。-5表示縮進5位顯示 %logger{50}-%msg:某一個類裏面輸出的相關信息 %n:換行 --> <!-- 控制臺設置 --> <!--appender標簽:日誌輸出的位置配置 name="consoleAppender":名字 class="ch.qos.logback.core.ConsoleAppender:引入類" --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoder標簽指定輸出格式 --> <encoder> <pattern>${log.pattern}</pattern> <!-- log的輸出格式,按照上面的log.pattern格式輸出--> </encoder> </appender> <!-- debug --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file >${log.filePath}/debug.log</file><!-- 文件路徑,log.filePath是上面定義的路徑 --> <!-- 滾動策略 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 設置文件名稱 ,用絕對路徑--> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> <!-- 日誌最大保存歷史數量 --> </rollingPolicy> <!-- encoder標簽指定輸出格式 --> <encoder> <pattern>${log.pattern}</pattern><!-- log的輸出格式,按照上面的log.pattern格式輸出--> </encoder> <!-- 過濾器 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <!-- 只記錄debug級別的日誌信息 --> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> <!-- 若不是debug級別日誌,則過濾掉 --> </filter> </appender> <!-- INFO --> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file >${log.filePath}/info.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- error --> <appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file >${log.filePath}/error.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- name:指定掃描的包 level:只記錄哪一個級別以上的日誌 additivity="true":會把父類(下面的root標簽)中的內容包括進來,即也會在控制臺輸出--> <logger name="cn.qiuuuu" level="${log.level}" additivity="true"> <!-- 與上面三個appender綁定 --> <appender-ref ref="debugAppender" /> <appender-ref ref="infoAppender" /> <appender-ref ref="errorAppender" /> </logger> <!-- --> <root level="info"> <appender-ref ref="consoleAppender" /><!-- 與上面的appender綁定,控制臺輸出 --> </root> </configuration>
logback配置