▶ Log4j2 性能 "https://logging.apache.org/log4j/2.x/performance.html" ▶ Spring Boot 依賴與配置 Maven 依賴 XML 配置 resources/log4j2.xml 混合 sync/async 彩色日誌 分類輸出到不 ...
▶ Log4j2 性能
▶ Spring Boot 依賴與配置
Maven 依賴
<!-- web -->
<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>
<!-- 日誌 Log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<!-- Log4j2 非同步支持 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency>
XML 配置 resources/log4j2.xml
- 混合 sync/async
- 彩色日誌
- 分類輸出到不同文件
- 自動壓縮日誌文件並歸檔
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration後面的status,這個用於設置log4j2自身內部的信息輸出,可以不設置,當設置成trace時,
你會看到log4j2內部各種詳細輸出。可以設置成OFF(關閉) 或 Error(只輸出錯誤信息)。
30s 刷新此配置
-->
<configuration status="WARN" monitorInterval="30">
<!-- 日誌文件目錄、壓縮文件目錄、日誌格式配置 -->
<properties>
<Property name="fileName">/Users/admin/Code/log</Property>
<Property name="fileGz">/Users/admin/Code/log/7z</Property>
<Property name="PID">????</Property>
<Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
</properties>
<Appenders>
<!-- 輸出控制台日誌的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!--控制台只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch)-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 輸出日誌的格式 -->
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<!-- 列印出所有的信息,每次大小超過size,則這size大小的日誌會自動存入按年份-月份建立的文件夾下麵併進行壓縮,作為存檔 -->
<RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<Filters>
<!-- 只記錄info和warn級別信息 -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 指定每天的最大壓縮包個數,預設7個,超過了會覆蓋之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
<!-- 存儲所有error信息 -->
<RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<Filters>
<!-- 只記錄error級別信息 -->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 指定每天的最大壓縮包個數,預設7個,超過了會覆蓋之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
</Appenders>
<!-- Mixed sync/async -->
<Loggers>
<Root level="debug" includeLocation="true">
<AppenderRef ref="console"/>
<AppenderRef ref="infoFile"/>
<AppenderRef ref="errorFile"/>
</Root>
<AsyncRoot level="debug" includeLocation="true">
<AppenderRef ref="console"/>
<AppenderRef ref="infoFile"/>
<AppenderRef ref="errorFile"/>
</AsyncRoot>
</Loggers>
</configuration>
最終效果如下:
© 著作權歸作者所有,轉載或內容合作請聯繫作者
問題來了,請問諸位你們項目中目前在使用Logback還是Log4j2呢?
● 【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?
本文由博客一文多發平臺 OpenWrite 發佈!