1. 程式人生 > 其它 >Springboot整合使用logback日誌框架

Springboot整合使用logback日誌框架

起步

Springboot框架已經整合了logback依賴,因此不再需要加入依賴。
關於日誌系統的配置檔案,官方推薦我們使用logback-spring.xml 而不是 logback.xml
因此我們在resources(classpath路徑)下建立一個名為logback-spring.xml的配置檔案

 

 

配置資訊

建立好上面提到的.xml檔案以後,在檔案中填寫以下內容

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日誌級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設定為WARN,則低於WARN的資訊都不會輸出 
--> <!-- scan:當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true --> <!-- scanPeriod:設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。 --> <!-- debug:當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。 --> <configuration scan="true" scanPeriod="10 seconds"> <!--
<include resource="org/springframework/boot/logging/logback/base.xml" /> --> <contextName>Logback</contextName> <!-- name的值是變數的名稱,value的值時變數定義的值。通過定義的值會被插入到logger上下文中。定義變數後,可以使“${}”來使用變數。 --> <!-- 定義日誌檔案 存放位置 專案下logs資料夾--> <property name="logDir" value
="logs/" /> <!-- 日誌最大的歷史 30天 --> <property name="maxHistory" value="30" /> <!-- 控制檯輸出日誌 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern> <charset class="java.nio.charset.Charset">UTF-8</charset> </encoder> </appender> <!-- ERROR級別日誌 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 過濾出 error 使用 try {}catch (Exception e){} 的話異常無法寫入日誌,可以在catch裡用logger.error()方法手動寫入日誌 logger.error("程式異常, 詳細資訊:{}", e.getLocalizedMessage() , e); --> <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>${logDir}\%d{yyyyMMdd}\error.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern> <charset class="java.nio.charset.Charset">UTF-8</charset> </encoder> <append>false</append> <prudent>false</prudent> </appender> <!-- WARN級別日誌 --> <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender"> <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>${logDir}\%d{yyyyMMdd}\warn.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern> <charset class="java.nio.charset.Charset">UTF-8</charset> </encoder> <append>false</append> <prudent>false</prudent> </appender> <!-- INFO級別日誌 --> <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>${logDir}\%d{yyyyMMdd}\info.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern> <charset class="java.nio.charset.Charset">UTF-8</charset> </encoder> <append>false</append> <prudent>false</prudent> </appender> <!-- DEBUG級別日誌 --> <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>${logDir}\%d{yyyyMMdd}\debug.log</fileNamePattern> <maxHistory>${maxHistory}</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger-%msg%n</pattern> <charset class="java.nio.charset.Charset">UTF-8</charset> </encoder> <append>false</append> <prudent>false</prudent> </appender> <!--檔案日誌, 按照每天生成日誌檔案 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名--> <FileNamePattern>${logDir}/%d{yyyyMMdd}/cwbb.%d{yyyy-MM-dd}.log</FileNamePattern> <!--日誌檔案保留天數--> <MaxHistory>30</MaxHistory> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化輸出:%d表示日期,%thread表示執行緒名,%-5level:級別從左顯示5個字元寬度%msg:日誌訊息,%n是換行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern> </encoder> <!--日誌檔案最大的大小--> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> </appender> <!-- 非同步輸出 --> <appender name="dayLogAsyncAppender" class="ch.qos.logback.classic.AsyncAppender"> <includeCallerData>true</includeCallerData> <!-- 不丟失日誌.預設的,如果佇列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 --> <discardingThreshold>0</discardingThreshold> <!-- 更改預設的佇列的深度,該值會影響效能.預設值為256 --> <queueSize>512</queueSize> <appender-ref ref="FILE"/> </appender> <!--專為 spring 定製 --> <logger name="org.springframework" level="info"/> <!-- show parameters for hibernate sql 專為 Hibernate 定製 --> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" /> <logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" /> <logger name="org.hibernate.SQL" level="DEBUG" /> <logger name="org.hibernate.engine.QueryParameters" level="DEBUG" /> <logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" /> <!-- 統一配置日誌輸出,root標籤和logger標籤,如果這開啟了就把不同環境的關上 --> <!-- root標籤:相當於開關,只有把定義的appender新增到這裡 才會生效有日誌 --> <!-- <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="ASYNC_FILE" /> <appender-ref ref="ASYNC_ERROR_FILE" /> </root> --> <!-- logger標籤:用來設定某一個包或者具體的某一個類的日誌列印級別 --> <!-- <logger name="com.test.springboot.admin" level="DEBUG" /> --> <!--myibatis log configure--> <!-- <logger name="com.apache.ibatis" level="TRACE"/> <logger name="java.sql.Connection" level="DEBUG"/> <logger name="java.sql.Statement" level="DEBUG"/> <logger name="java.sql.PreparedStatement" level="DEBUG"/> --> <!-- root級別 DEBUG --> <!-- <logger name="com.test.newdemo" level="DEBUG"> <appender-ref ref="FILE"/> <appender-ref ref="CONSOLE"/> </logger> --> <!--輸出等級和需要輸出在哪些地方(ref的內容是上方配置的節點的name)--> <logger name="cn.na.cwbb" level="DEBUG"> <appender-ref ref="FILE"/> <appender-ref ref="CONSOLE"/> </logger> <root level="INFO"> <!-- 控制檯輸出 --> <appender-ref ref="CONSOLE" /> <!-- 檔案輸出 --> <appender-ref ref="ERROR" /> <appender-ref ref="INFO" /> <appender-ref ref="WARN" /> <appender-ref ref="DEBUG" /> </root> </configuration>

然後,在application.yml或者application.properties配置檔案中指定日誌系統使用的配置檔案

logging:
  # logback.xml配置檔案的位置
  config: classpath:logback-spring.xml

 

然後呢,就可以在開發中使用了。

3.使用方法

3.1 需要引入的類

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

 

3.2 具體的操作方法

//對日誌類的引用
private final Logger log = LoggerFactory.getLogger(this.getClass());
//日誌的記錄
log.info("日誌記錄");

記錄日誌的時候我們可能需要在檔案中記錄下異常的堆疊資訊,經過測試,logger.error(e) 不會打印出堆疊資訊,正確的寫法是:

logger.error("程式異常, 詳細資訊:{}", e.getLocalizedMessage() , e);

編寫程式碼

  在服務類上新增@Slf4j

 

這個註解是lombok的,所以在使用的時候需要先整合lombok,如果不知道如何整合的小夥伴可以看一下《SpringBoot之SpringBoot整合lombok

在方法中就可以直接使用log日誌物件了

 

 大括號代表傳入引數的意思,log.info方法的第二個引數是不定長引數可以無限傳入,但是建議不到太多