Spring Boot 日誌處理你還在用Logback?
阿新 • • 發佈:2019-11-06
▶ Log4j2 效能
- https://logging.apache.org/log4j/2.x/performance.html
▶ 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狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問?
● Spring Boot 新一代監控你該這麼玩
● Spring Boot 異常處理
● Spring Boot 配置 - 配置資訊加密
● 拒絕黑盒應用-Spring Boot 應用視覺化監控
● 併發Bug之源有三,請睜大眼睛看清它們
本文由部落格一文多發平臺 OpenWrite 釋出!