Logback是由log4j創始人設計的又一個開源日誌組件。java
logback當前分紅三個模塊:logback-core,logback- classic和logback-access。web
logback-core是其它兩個模塊的基礎模塊。spring
logback-classic是log4j的一個 改良版本。此外logback-classic完整實現SLF4J API使你能夠很方便地更換成其它日誌系統如log4j或JDK14 Logging。api
logback-access訪問模塊與Servlet容器集成提供經過Http來訪問日誌的功能。app
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-access</artifactId> <version>1.1.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.3</version> </dependency>
logback的配置文件都放在/src/main/resource/文件夾下的logback.xml文件中。放置好了以後,系統會自動找到這個配置文件。ide
<?xml version="1.0" encoding="UTF-8"?> <!-- 級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL --> <!-- 日誌輸出規則 根據當前ROOT 級別,日誌輸出時,級別高於root默認的級別時 會輸出 --> <!-- 如下 每一個配置的 filter 是過濾掉輸出文件裏面,會出現高級別文件,依然出現低級別的日誌信息,經過filter 過濾只記錄本級別的日誌 --> <!-- scan 當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。 --> <!-- scanPeriod 設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 --> <!-- debug 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。 --> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 動態日誌級別 --> <jmxConfigurator /> <!-- 定義日誌文件 輸出位置 --> <property name="log_dir" value="myCat_log" /> <!-- 日誌最大的歷史 30天 --> <property name="maxHistory" value="30" /> <!-- ConsoleAppender 控制檯輸出日誌 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> <!-- 設置日誌輸出格式 --> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n </pattern> </encoder> </appender> <!-- ERROR級別日誌 --> <!-- 滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件 RollingFileAppender --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 過濾器,只記錄WARN級別的日誌 --> <!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 設置過濾級別 --> <level>ERROR</level> <!-- 用於配置符合過濾條件的操做 --> <onMatch>ACCEPT</onMatch> <!-- 用於配置不符合過濾條件的操做 --> <onMismatch>DENY</onMismatch> </filter> <!-- 最經常使用的滾動策略,它根據時間來制定滾動策略.既負責滾動也負責出發滾動 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌輸出位置 可相對、和絕對路徑 --> <fileNamePattern> ${log_dir}/error/%d{yyyy-MM-dd}/error-log.log </fileNamePattern> <!-- 可選節點,控制保留的歸檔文件的最大數量,超出數量就刪除舊文件假設設置每一個月滾動,且<maxHistory>是6, 則只保存最近6個月的文件,刪除以前的舊文件。注意,刪除舊文件是,那些爲了歸檔而建立的目錄也會被刪除 --> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern> <!-- 設置日誌輸出格式 --> %d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n </pattern> </encoder> </appender> <!-- WARN級別日誌 appender --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 過濾器,只記錄WARN級別的日誌 --> <!-- 果日誌級別等於配置級別,過濾器會根據onMath 和 onMismatch接收或拒絕日誌。 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 設置過濾級別 --> <level>WARN</level> <!-- 用於配置符合過濾條件的操做 --> <onMatch>ACCEPT</onMatch> <!-- 用於配置不符合過濾條件的操做 --> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌輸出位置 可相對、和絕對路徑 --> <fileNamePattern>${log_dir}/warn/%d{yyyy-MM-dd}/warn-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- INFO級別日誌 appender --> <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/info/%d{yyyy-MM-dd}/info-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- DEBUG級別日誌 appender --> <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/debug/%d{yyyy-MM-dd}/debug-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- TRACE級別日誌 appender --> <appender name="TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>TRACE</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log_dir}/trace/%d{yyyy-MM-dd}/trace-log.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger - %msg%n</pattern> </encoder> </appender> <!-- root級別 DEBUG --> <root> <!-- 打印debug級別日誌及以上級別日誌 --> <level value="debug" /> <!-- 控制檯輸出 --> <appender-ref ref="console" /> <!-- 文件輸出 --> <appender-ref ref="ERROR" /> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="DEBUG" /> <appender-ref ref="TRACE" /> </root> </configuration>
package com.mycat.manager.controller.test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller @RequestMapping("test") public class TestController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); /** * logback測試 */ @RequestMapping("logbackTest") @ResponseBody public String toBase() { logger.debug("輸出debug級別的日誌....."); logger.info("輸出info級別的日誌....."); logger.error("輸出error級別的日誌....."); return "logbackTest"; } }