你所遺漏的SpringBoot日誌管理知識


Spring Boot對所有內部日誌記錄使用了Commons Logging,但是底層日誌實現是開放的。可以爲 Java Util日誌、Log4J2和Logback。對於每種日誌都預先配置爲使用控制檯輸出和可選的文件輸出。默認爲Logback


日誌配置


通過將相應的庫添加到classpath可以激活各種日誌系統,然後在classpath根目錄下提供合適的配置文件可以進一步定製日誌系統,配置文件也可以通過Spring Environment的logging.config屬性指定。

以下文件會根據你選擇的日誌系統進行加載:

日誌系統定製配置
Logbacklogback-spring.xml,logback-spring.groovy,logback.xmllogback.groovy
Log4jlog4j.propertieslog4j.xml
Log4j2log4j2-spring.xmllog4j2.xml
JDK (Java Util Logging)logging.properties

 如果可能的話,建議你使用-spring變種形式定義日誌配置(例如,使用logback-spring.xml而不是logback.xml)。如果你使用標準的配置路徑,Spring可能不能夠完全控制日誌初始化。

 Java Util Logging從可執行jar運行時會導致一些已知的類加載問題,我們建議儘可能不使用它。

以下是從Spring Envrionment轉換爲System properties的一些有助於定製的配置屬性:

Spring EnvironmentSystem PropertyComments
logging.exception-conversion-wordLOG_EXCEPTION_CONVERSION_WORD記錄異常使用的關鍵字
logging.fileLOG_FILE如果指定就會在默認的日誌配置中使用
logging.pathLOG_PATH如果指定就會在默認的日誌配置中使用
logging.pattern.consoleCONSOLE_LOG_PATTERN日誌輸出到控制檯(stdout)時使用的模式(只支持默認的logback設置)
logging.pattern.fileFILE_LOG_PATTERN日誌輸出到文件時使用的模式(如果LOG_FILE啓用,只支持默認的logback設置)
logging.pattern.levelLOG_LEVEL_PATTERN用來渲染日誌級別的格式(默認%5p,只支持默認的logback設置)
PIDPID當前的處理進程(process)ID(能夠找到,且還沒有用作OS環境變量)

所有支持的日誌系統在解析配置文件時都能獲取系統屬性的值,具體可以參考spring-boot.jar中的默認配置。


log4j2配置



一份史詩級配置

<Configuration status="INFO" monitorInterval="30">
    <Properties>
        <Property name="logpath">/home/logs/log/dev</Property>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n" />
        </Console>
        <RollingFile name="debug" fileName="${logpath}/debug/erp_debug.log"
                     filePattern="${logpath}/debug/erp_debug_%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50 MB"/>\
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${logpath}/debug" maxDepth="1">
                    <IfFileName glob="erp_debug_*.log"/>
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="info" fileName="${logpath}/info/erp_info.log"
                     filePattern="${logpath}/info/erp_info_%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50 MB"/>\
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${logpath}/info" maxDepth="1">
                    <IfFileName glob="erp_info_*.log"/>
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="warn" fileName="${logpath}/warn/erp_warn.log"
                     filePattern="${logpath}/warn/erp_warn_%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50 MB"/>\
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${logpath}/warn" maxDepth="1">
                    <IfFileName glob="erp_warn_*.log"/>
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
        <RollingFile name="error" fileName="${logpath}/error/erp_error.log"
                     filePattern="${logpath}/error/erp_error_%d{yyyy-MM-dd}-%i.log">
            <Filters>
                <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <PatternLayout pattern="[%d][%-5p][%t] %m (%F:%L)%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="24" modulate="true"/>
                <SizeBasedTriggeringPolicy size="50 MB"/>\
            </Policies>
            <DefaultRolloverStrategy max="30">
                <Delete basePath="${logpath}/error" maxDepth="1">
                    <IfFileName glob="erp_error_*.log"/>
                    <IfLastModified age="15d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="debug"/>
            <AppenderRef ref="info"/>
            <AppenderRef ref="warn"/>
            <AppenderRef ref="error"/>
        </Root>
    </Loggers>
</Configuration>


  1. 各個文件輸出到不同級別的目錄

  2. 設置最大保存時間爲15天

  3. 每個文件最大50M


tomcat的日誌


在properties文件添加如下配置:

server.tomcat.basedir=/home/logs/log-api/tomcat-logs
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%t %a "%r" %s %D (%D ms)
server.use-forward-headers=true


lombok的神組合


使用lombok的@Slf4j 註解,省去配置聲明log的繁瑣,提高開發效率。


idea的 grep console組合


Grep Console 自定義設置控制檯輸出顏色,這樣控制檯就能比較明顯的看到警告或者錯誤的信息,方便查找問題

視頻地址:https://space.bilibili.com/313762729/#/



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