SpringBoot--------日誌配置(四)

 

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>

查看當前項目所依賴的其它項目

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章