Spring boot-Logback
阿新 • • 發佈:2018-11-01
1、logback簡單介紹 開源,是Log4j的改良版本 Springboot提供了一套日誌系統,lockback是最優選擇 2、結構 logback被分為三個元件:core、classic、access 其中,core提供了Logback的核心功能,另外兩個元件在其基礎之上; classic實現了Slf4j的Api,當需要配合Slf4j使用時,需要將classic引入進來; access為了繼承Servlet環境而準備,可提供Http_accrss日誌介面 3、配置 在pom.xml檔案中加入: <!--logback依賴匯入--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> 即可 先寫一個測試類: package com.dairy.sell; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /* Logback測試 */ @RunWith(SpringRunner.class) @SpringBootTest //@Slf4j public class LogTest { //新增@Slf4j註釋後這裡就不需要使用了 private final Logger logger= LoggerFactory.getLogger(LogTest.class); @Test public void test1() { String name = "dairy"; String password = "123"; log.debug("debug"); log.info("name:{},password:{}", name, password); log.error("error"); log.warn("warm"); } } 其輸入結果可以在控制檯上檢視,但是這樣的方式顯然太麻煩,需要新增每個需要log日誌的類。所以放在註釋的內容。 4、方式一:在SpringBoot的配置檔案加入Logback的相關配置,如下: // # 日誌變短 logging: pattern: // 日誌輸入的格式 console: "%d -%msg%n" // # log檔案存放的位置 path: /var/log/tomcat/sell // # log檔案 file: /var/log/tomcat/sell/dairui.log // 指定級別 level: debug // 指定log的類 level: com.dairy.sell.LogTest: debug 方式二:在根目錄下新增logback-spring.xml檔案: <?xml version="1.0" encoding="utf-8" ?> <configuration> // logback的核心類 <appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"> // 設定輸入的格式可點進去看原始碼 // defaultConverterMap.putAll(Parser.DEFAULT_COMPOSITE_CONVERTER_MAP); // defaultConverterMap.put("d", DateConverter.class.getName()); // defaultConverterMap.put("date", DateConverter.class.getName()); // defaultConverterMap.put("r", RelativeTimeConverter.class.getName()); // defaultConverterMap.put("relative", RelativeTimeConverter.class.getName()); // defaultConverterMap.put("level", LevelConverter.class.getName()); // defaultConverterMap.put("le", LevelConverter.class.getName()); // defaultConverterMap.put("p", LevelConverter.class.getName()); // defaultConverterMap.put("t", ThreadConverter.class.getName()); // defaultConverterMap.put("thread", ThreadConverter.class.getName()); // 對輸出命名、格式、顏色等設定 <layout class="ch.qos.logback.classic.PatternLayout"> <pattern> %d -%msg%n </pattern> </layout> </appender> // 設定日誌每天輸出,並放到資料夾中 <appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> // 設定日誌等級 預設級別是debug <filter class="ch.qos.logback.classic.filter.LevelFilter"> <Level>ERROR</Level> // 靜止其他的,比它等級高的 <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> // 檔案位置 一定要絕對位置 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/tomcat/sell/info.%d.log</fileNamePattern> </rollingPolicy> </appender> <appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <Level>ERROR</Level> </filter> <encoder> <pattern> %msg%n </pattern> </encoder> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>/var/log/tomcat/sell/error.%d.log</fileNamePattern> </rollingPolicy> </appender> <root level="info"> <appender-ref ref="consoleLog"/> <appender-ref ref="fileErrorLog"/> <appender-ref ref="fileInfoLog"/> </root> </configuration> 第二個Logback配置檔案 <?xml version="1.0" encoding="UTF-8"?> <configuration debug="false"> <!--定義日誌檔案的儲存地址 勿在 LogBack 的配置中使用相對路徑--> <property name="LOG_HOME" value="/home" /> <!-- 控制檯輸出 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <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> </appender> <!-- 按照每天生成日誌檔案 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日誌檔案輸出的檔名--> <FileNamePattern>${LOG_HOME}/TestWeb.log.%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> <!-- 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" /> <!--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 level="INFO"> <appender-ref ref="STDOUT" /> <appender-ref ref="FILE" /> </root> <!--日誌非同步到資料庫 --> <appender name="DB" class="ch.qos.logback.classic.db.DBAppender"> <!--日誌非同步到資料庫 --> <connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource"> <!--連線池 --> <dataSource class="com.mchange.v2.c3p0.ComboPooledDataSource"> <driverClass>com.mysql.jdbc.Driver</driverClass> <url>jdbc:mysql://127.0.0.1:3306/databaseName</url> <user>root</user> <password>root</password> </dataSource> </connectionSource> </appender> </configuration> 5、測試類 package com.dairy.sell; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /* Logback測試 */ @RunWith(SpringRunner.class) @SpringBootTest @Slf4j public class LogTest { // private final Logger logger= LoggerFactory.getLogger(LogTest.class); @Test public void test1() { String name = "dairy"; String password = "123"; log.debug("debug"); log.info("name:{},password:{}", name, password); log.error("error"); log.warn("warm"); } } 輸出結果: 2018-08-25 09:22:25.149---------- [main] INFO com.dairy.sell.LogTest - Started LogTest in 4.305 seconds (JVM running for 6.237) 2018-08-25 09:22:25.299---------- [main] INFO com.dairy.sell.LogTest - name:dairy,password:123 2018-08-25 09:22:25.299---------- [main] ERROR com.dairy.sell.LogTest - error 2018-08-25 09:22:25.300---------- [main] WARN com.dairy.sell.LogTest - warma