https://i.xue.taobao.com/my/learning.htm?spm=a2174.7365761.0.0.oxhqUo
第3章 SpringBoot 日誌配置
在市場上存在非常多的日誌框架:
日誌抽象層 |
日誌實現 |
jboss-logging (不適合企業項目開發使用) JCL(Jakarta Commons Logging) (2014年後不 再維護) SLF4j(Simple Logging Facade for Java) (與 log4j Logback 同一個人開發) |
JUL (java.util.logging)(擔心被搶市場,推出的) Log4j (存在性能問題) Logback (Log4j同一個人開發的新框架,做了重大 升級) Log4j2 ( apache開發的很強大,借了名log4j的名, 但 當前很多框架未適配上) |
Spring Boot 採用了 slf4j+logback 的組合形式,Spring Boot也提供對JUL、log4j2、Logback提供了默認配置
Spring官網參考文檔:
https://docs.spring.io/spring-boot/docs/2.0.6.RELEASE/reference/htmlsingle/#boot-features-logging
3.1 默認日誌配置
SpringBoot默認配置好了日誌, 只要啓動 Spring Boot 項目就會在控制檯輸出日誌信息。
package com.mengxuegu.springboot;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBoot03LoggingApplicationTests {
//日誌記錄器
Logger logger = LoggerFactory.getLogger(getClass());
@Test
public void contextLoads() {
//1. 以下日誌級別,由低到高:trace < debug < info < warn < error
//2. Spring Boot默認設定的是 info 級別日誌,(日誌默認級別也稱爲root級別)。
// 可修改默認級別日誌:logging.level.level=級別名
//3. 可以進行調整日誌級別,設定某個級別後,就只打印設定的這個級別及後面高級別的日誌信息
// 沒有指定級別的就用SpringBoot默認規定的級別:root級別
//4. 可修改指定包的日誌級別:
// 指定某個包下面的所有日誌級別:logging.level.包名=級別名
//跟蹤運行信息
logger.trace("這是 trace 日誌信息!");
//調試信息
logger.debug("這是 debug 日誌信息!");
//自定義信息
logger.info("這是 info 日誌信息");
//警告信息:如果運行結果是不預期的值,則可以進行警告
logger.warn("這是 warn 日誌信息");
//錯誤信息:出現異常捕獲時
logger.error("這是 error 日誌信息");
}
}
修改日誌默認級別
3.2 修改日誌默認配置
application.properties中修改日誌默認配置
3.2.1 修改日誌文件生成路徑
logging.file |
logging.path |
示例 |
說明 |
(none) |
(none) |
|
只在控制檯輸出 |
指定文件名 |
(none) |
springboot.log |
輸出到當前項目根路徑下的springboot.log文件中 |
(none) |
指定目錄 |
/springboot/log |
輸出到當前項目所在磁盤根路徑下的/springboot/log目錄中的spring.log文件中 |
指定文件名 |
指定目錄 |
|
當兩個同事指定時,採用的是logging.file指定。 推薦使用logging.file設置即可,因爲它可自定義文件名 |
3.2.2 修改日誌輸出的格式
3.3 分析日誌底層實現
在web項目當中引用了 spring-boot-starter-web 依賴
總結:SpringBoot中默認日誌啓動器爲 spring-boot-starter-logging ,默認採用的是 logback
日誌框架
在 spring-boot-2.0.6.RELEASE.jar! \org\springframework\boot\logging\logback\base.xml 做了日誌
的默認配置
日誌文件採用方式爲:滾動文件追加器
在下面類中會讀取上面xml中配置的信息
spring-boot-2.0.6.RELEASE.jar!org.springframework.boot.logging.LoggingSystemProperties
如果spring boot的日誌功能無法滿足我們的需求(比如異步日誌記錄等),我們可以自已定義的日誌配置文件。
3.4 自定義日誌配置
3.4.1 自定義Logback日誌配置
在類路徑下,存放對應日誌框架的自定義配置文件即可;SpringBoot就不會使用它默認的日誌配置文件了。
Logging System |
自定義日誌配置文件名 |
Logback |
logback-spring.xml , logback-spring.groovy , logback.xml , or logback.groovy |
Log4j2 |
log4j2-spring.xml or log4j2.xml |
JDK (Java Util Logging) |
logging.properties |
在 resources 目錄下創建 logback.xml , 文件內容如下,SpringBoot就會採用以下日誌配置:
logback.xml :是直接就被日誌框架加載了。
logback-spring.xml:配置項不會被日誌框架直接加載,而是由SpringBoot 解析日誌配置文件,進而可以使用
SpringBoot 的 Profile 特殊配置
3.4.2 使用 Profile 特殊配置
使用日誌 Profille 特殊配置, 可根據不同的環境激活不同的日誌配置
3.5 切換日誌框架
將SpringBoot默認的 logback 切換爲 log4j2 日誌框架, 參考文檔
log4j2.xml案例:
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<properties>
<property name="logPath">log</property>
<property name="logName">third-authen</property>
<property name="errPath">log/error</property>
<property name="errName">third-authen_error</property>
</properties>
<appenders>
<!-- 日誌級別 ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<!-- ACCEPT(接受), DENY(拒絕) 或NEUTRAL(中立) -->
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="RollingLogFile" filename="${logPath}/${logName}.log"
filepattern="${logPath}/${logName}_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1024 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
<Filters>
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
<RollingFile name="RollingErrFile" filename="${errPath}/${errName}.log"
filepattern="${logPath}/${errName}_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<SizeBasedTriggeringPolicy size="1024 MB"/>
</Policies>
<DefaultRolloverStrategy max="20"/>
<Filters>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
</RollingFile>
</appenders>
<loggers>
<root level="info">
<appender-ref ref="RollingLogFile"/>
<!-- <appender-ref ref="RollingNasFile" /> -->
<appender-ref ref="RollingErrFile"/>
</root>
</loggers>
</configuration>
查看當前項目所依賴的其它項目