SpringBoot學習--09配置log4j2日誌詳解(下)--升級

daqianmen發表於2021-09-09

上篇我們完成了log4j2的日誌配置,但是log4j2最好的地方就是非同步日誌模式,所以在這裡我們就要進行升級改造.

  • 非同步改造(混合非同步輸出:控制檯同步輸出,儲存日誌非同步輸出)

  • 在pom.xml中匯入log4j2日誌的非同步依賴
    <!-- log4j2非同步依賴包 -->
    <dependency>
      <groupId>com.lmax</groupId>
      <artifactId>disruptor</artifactId>
      <version>3.4.2</version>
    </dependency>
  • 修改xml中的配置:
# 原有配置<Loggers>
    <!--過濾掉spring和mybatis的一些無用的DEBUG資訊-->
    <logger name="org.springframework" level="INFO" />
    <logger name="org.mybatis" level="INFO" />
    <!-- 配置日誌的根節點 -->
    <!-- 定義logger,只有定義了logger並引入了appender,appender才會生效 -->
    <root level="${OUT_LOG_LEVEL}">
      <appender-ref ref="console_out_appender" />
      <appender-ref ref="console_err_appender" />
      <appender-ref ref="trace_appender" />
      <appender-ref ref="debug_appender" />
      <appender-ref ref="info_appender" />
      <appender-ref ref="warn_appender" />
      <appender-ref ref="error_appender" />
    </root>
  </Loggers>

修改後的配置:

  <Loggers>
    <!--過濾掉spring和mybatis的一些無用的DEBUG資訊-->
    <logger name="org.springframework" level="INFO" />
    <logger name="org.mybatis" level="INFO" />
    <!-- 配置日誌的根節點 -->
    <!-- 定義logger,只有定義了logger並引入了appender,appender才會生效 -->
   <!-- 列印日誌同步輸出 -->
    <root level="${OUT_LOG_LEVEL}" includeLocation="true">
      <appender-ref ref="console_out_appender" />
      <appender-ref ref="console_err_appender" />
    </root>
    <!-- 儲存日誌非同步輸出 -->
    <AsyncLogger level="${OUT_LOG_LEVEL}" includeLocation="true">
      <appender-ref ref="trace_appender" />
      <appender-ref ref="debug_appender" />
      <appender-ref ref="info_appender" />
      <appender-ref ref="warn_appender" />
      <appender-ref ref="error_appender" />
    </AsyncLogger>
  </Loggers>
  • 很多時候專案中的日誌系統沒有匯入log4j2的依賴包,使用介面會出現錯誤.現在將日誌系統重構成基於Slf4j和log4j2的日誌系統,使用slf4j可以很好的保證我們的日誌系統具有良好的相容性,相容當前常見幾種日誌系統,不會出現異常.


  1. 在pom.xml匯入slf4j和log4j2的橋接包,

    <!--  -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
    </dependency>
     <!--  -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>

  1. 使用時將log匯入包替換,如下所示:

#替換前import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;private static final Logger log = LogManager.getLogger(SysDepartmentController.class);
#替換後import org.slf4j.Logger;import org.slf4j.LoggerFactory;private static final Logger log = LoggerFactory.getLogger(SysDepartmentController.class);

其輸出效果是一樣的,但是專案作為介面的時候不會因為沒有匯入log4j2的依賴包而出現異常.



作者:淵默十三
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1727/viewspace-2818369/,如需轉載,請註明出處,否則將追究法律責任。

相關文章