此文已由作者易國強授權網易雲社群釋出。
歡迎通路網易雲社群,了解更多網易技術産品營運經驗。
為什麼選擇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>
- 不足之處,歡迎指正,謝謝~
免費體驗雲安全(易盾)内容安全、驗證碼等服務
更多網易技術、産品、營運經驗分享請點選。
相關文章:
【推薦】 塊存儲、檔案存儲、對象存儲這三者的本質差别