天天看點

Spring Boot 學習系列(06)—采用log4j2記錄日志

此文已由作者易國強授權網易雲社群釋出。

歡迎通路網易雲社群,了解更多網易技術産品營運經驗。

為什麼選擇log4j2

  • log4j2相比于log4j1.x和logback來說,具有更快的執行速度。同時也支援日志的異步寫入。還有很多有趣的特性,大家可以參考官方文檔
  • 在這篇文章裡,對比描述了log4j2的優點,以及在傳統的應用中如何進行日志的更新。在本文主要說下spring boot環境中如果使用lig4j2記錄日志。
  • spring boot 預設采用Logback進行日志的記錄。當然也是支援log4j的。想要替換,其實很簡單,如下代碼所示,我們将預設的logback日志依賴移除,加入log4j2的依賴即可。
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions></dependency><dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId></dependency>      
  • 需要注意的是,如果項目中引入的其他依賴包中也使用了logback,編譯時提示錯誤,以同樣的方式将對應的依賴包exclusion即可。
  • 如果我們需要自定義日志記錄的格式和内容,我們可以在application.properties檔案中指定日志檔案的路徑,如下所示:
logging.config=classpath:log4j2.xml      
  • 然後在resources下加入log4j2.xml檔案,示例如下:
<?xml version="1.0" encoding="UTF-8"?><configuration status="info">
    <!--先定義所有的appender-->
    <appenders>
        <!--這個輸出控制台的配置-->
        <Console name="console" target="SYSTEM_OUT">
            <!--控制台隻輸出level及以上級别的資訊(onMatch),其他的直接拒絕(onMismatch)-->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            <!--這個都知道是輸出日志的格式-->
            <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
        </Console>

        <!-- infoLog日志 -->
        <RollingFile name="infolog" fileName="log/info.log"
                     filePattern="log/info.%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="INFO"/>
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true"/>
            </Policies>
        </RollingFile>
        <!-- debugLog日志 -->
        <RollingFile name="debuglog" fileName="log/debug.log"
                     filePattern="log/debug.%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="DEBUG"/>
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true"/>
            </Policies>
        </RollingFile>
        <!-- errorLog日志 -->
        <RollingFile name="errorlog" fileName="log/faerror.log"
                     filePattern="log/faerror.%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="ERROR"/>
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true"/>
            </Policies>
        </RollingFile>
        <!-- warnLog日志 -->
        <RollingFile name="warnlog" fileName="log/warn.log"
                     filePattern="log/warn.%d{yyyy-MM-dd}.log">
            <ThresholdFilter level="WARN"/>
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss,SSS} - %logger [%thread] %-5level %c %M:%L - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true"/>
            </Policies>
        </RollingFile>

        <!--監控相關日志 begin -->
        <RollingFile name="RollingFileHttpTrace" fileName="logs/trace/trace_http.log"
                     filePattern="log/trace/trace_http.log.%d{yyyy-MM-dd}.txt">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}],%m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>
    </appenders>

    <!--然後定義logger,隻有定義了logger并引入的appender,appender才會生效-->
    <loggers>

        <!-- 監控相關日志-->
        <logger name="httpTraceLog" level="INFO" additivity="false">
            <appender-ref ref="RollingFileHttpTrace"/>
        </logger>

        <!--建立一個預設的root的logger-->
        <root level="INFO" includeLocation="true">
            <appender-ref ref="errorlog"/>
            <appender-ref ref="warnlog"/>
            <appender-ref ref="infolog"/>
        </root>
    </loggers></configuration>      
  • 不足之處,歡迎指正,謝謝~

免費體驗雲安全(易盾)内容安全、驗證碼等服務

更多網易技術、産品、營運經驗分享請點選。

相關文章:

【推薦】 塊存儲、檔案存儲、對象存儲這三者的本質差别

繼續閱讀