java 中使用logback日誌,並實現日誌按天分類壓縮儲存。
阿新 • • 發佈:2018-11-10
以maven專案作為構建工具為例,首先引入使用logback需要的3個依賴,需要注意使用logback是需要引入slf4j-api的,因為logback是基於slf4j的
<!--logback--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency>
引入依賴之後下面,我們可以在classpath下建立logback.xml檔案,並按需要進行相應的配置。
下面的配置案例中實現的是按照每天將debug info error的日誌進行壓縮,並分別儲存到對應的資料夾下
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!-- 日誌級別 trace<debug<info<warn<error 若定義的日誌級別為info,則不會打印出 trace和debug的相關日誌。 --> <!-- 定義全域性引數常量 --> <property name="log.level" value="debug"/> <property name="log.maxHistory" value="30"/><!-- 30表示30個 --> <!-- 日誌的存放位置 --> <!--catalina.base表示tomcat的根路徑 --> <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"/> <!-- 定義appender (日誌的輸出和存放位置等). --> <!-- 控制檯設定 --> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${log.pattern}</pattern> <!-- 控制檯日誌輸出格式 --> </encoder> </appender> <!-- DEBUG --> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 日誌檔案會滾動 --> <!-- 檔案路徑 --> <file>${log.filePath}/debug.log</file><!-- 當前的日誌檔案存放路徑 --> <!-- 日誌滾動策略 --> <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> <pattern>${log.pattern}</pattern> <!-- 日誌檔案中日誌的格式 --> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>DEBUG</level> <onMatch>ACCEPT</onMatch> <!-- 用過濾器,只接受DEBUG級別的日誌資訊,其餘全部過濾掉 --> <onMismatch>DENY</onMismatch> </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> <!-- 用過濾器,只接受INFO級別的日誌資訊,其餘全部過濾掉 --> <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"> <!-- TimeBased預設是一天更新一次 --> <!-- 歷史日誌檔案的存放路徑和名稱 --> <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> <!-- 用過濾器,只接受ERROR級別的日誌資訊,其餘全部過濾掉 --> <onMismatch>DENY</onMismatch> </filter> </appender> <!-- logger標籤用於和appender進行繫結,並告訴logback哪些包(name屬性)的日誌資訊需要記錄 --> <!--logger將會繼承root標籤,在加上additivity="true"的屬性後 root標籤中的level將會被logger的level覆蓋--> <logger name="com.me" level="${log.level}" additivity="true"> <!-- level表示只記錄哪一個級別以上的日誌 --> <!-- 與appender進行繫結 --> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> <appender-ref ref="errorAppender"/> </logger> <root level="info"> <appender-ref ref="consoleAppender"/> </root> </configuration>
我們來看一下效果:
即時產生的日誌我們會分類存放到 tomcat/logs/webapps(該路徑在log.filePath中進行了配置)下面
等到第二天(與我們的日誌rolling策略有關,我們只以天為單位),會生成三個資料夾,資料夾中存放著被壓縮後的日誌檔案