springboot整合log4j的踩坑實(shí)戰(zhàn)記錄
1、依賴添加
1.1、添加依賴
需要引入 log4j 的依賴支持,推薦自己確定使用的版本。
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.11.2</version>
</dependency>1.2、剔除依賴
springboot 默認(rèn)自己內(nèi)部添加了對(duì)日志的支持,需要將其全部剔除掉,不然會(huì)影響 log4j 的依賴使用。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<exclusions>
<exclusion>
<groupId>*</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>2、配置日志
2.1、日志打印記錄
根據(jù)自己的需求進(jìn)行相關(guān)的配置,這里需要注意的是使用 xml 文件進(jìn)行配置,使用 properties 有坑沒(méi)爬起來(lái),文件名自定義,沒(méi)有啥要求,都會(huì)在配置文件中進(jìn)行指定的。
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<contextName>beordie</contextName>
<property name="path" value="E:\file\javalearn\blog\src\main\resources\logs" />
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${path}/debug.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log}/debug/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>debug</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log}/info.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log}/warn.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log}/error.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>15</maxHistory>
</rollingPolicy>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<springProfile name="dev">
<logger name="com.beordie" level="debug"/>
</springProfile>
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</configuration>2.2、指定配置文件
還需要在 spring boot 的項(xiàng)目配置文件中進(jìn)行配置的指定。
logging: config: classpath:log4j.xml
到這里完成對(duì)日志的整體配置,啟動(dòng)項(xiàng)目通過(guò)下面語(yǔ)句拿到日志對(duì)象即可進(jìn)行日志的打印輸出。
private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);
補(bǔ)充:log4j調(diào)優(yōu)和注意事項(xiàng)
日志模式-同步/異步
log4j2提供了AsyncAppender和AsyncLogger以及全局異步,開(kāi)啟方式如下:
- 同步模式:默認(rèn)配置即為同步模式,即沒(méi)有使用任何AsyncAppender和AsyncLogger。
- 全局異步:配置按照同步方式配,通過(guò)添加jvm啟動(dòng)參數(shù)即可開(kāi)啟全局異步,無(wú)需修改配置和應(yīng)用。
- 混合異步:使用異步Logger和同步Logger的混合配置,且不開(kāi)啟全局異步,即Logger配置中部分AsyncLogger,部分Logger。
日志模式使用注意事項(xiàng):
- 如果使用異步,建議使用AsyncLogger實(shí)現(xiàn)而不是AsyncAppender。
- 如果使用同步,AsyncLogger、AsyncAppender和全局異步只能使用一種,不可以同時(shí)配置AsyncAppender和AsyncLogger,或者配置了異步的情況下啟用了全局異步。
日志滾動(dòng)和清除策略
log4j2提供了基于文件大小的滾動(dòng)策略和基于時(shí)間的滾動(dòng)策略,也可以二者并用,這里給出基于大小的滾動(dòng)策略配置和基于大小/時(shí)間雙滾動(dòng)策略配置:
- 基于大小的滾動(dòng)策略:按照大小滾動(dòng),啟用壓縮,并最多保留N個(gè)文件
- 基于大小/時(shí)間雙滾動(dòng)滾動(dòng)策略:按照大小和時(shí)間滾動(dòng),啟用壓縮,單位時(shí)間內(nèi)控制最多保留日志個(gè)數(shù)并控制總的日志留存時(shí)間。
總結(jié)
到此這篇關(guān)于springboot整合log4j踩坑的文章就介紹到這了,更多相關(guān)springboot整合log4j踩坑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決Error occurred during initialization o
這篇文章主要介紹了解決Error occurred during initialization of VM Java虛擬機(jī)初始化失敗問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03
關(guān)于jar包與war包的區(qū)別及說(shuō)明
這篇文章主要介紹了關(guān)于jar包與war包的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05
如何在Spring?Boot中使用OAuth2認(rèn)證和授權(quán)
這篇文章主要介紹了如何在Spring?Boot中使用OAuth2認(rèn)證和授權(quán)的相關(guān)資料,OAuth2.0是一種開(kāi)放的授權(quán)協(xié)議,它允許用戶授權(quán)第三方應(yīng)用訪問(wèn)其賬戶(或資源),而無(wú)需共享其用戶賬戶憑據(jù),需要的朋友可以參考下2023-12-12
spring boot加載資源路徑配置和classpath問(wèn)題解決
這篇文章主要介紹了spring boot加載資源路徑配置和classpath問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
maven倉(cāng)庫(kù)repositories和mirrors的配置及區(qū)別詳解
這篇文章主要介紹了maven倉(cāng)庫(kù)repositories和mirrors的配置及區(qū)別詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
java實(shí)現(xiàn)socket從服務(wù)器連續(xù)獲取消息的示例
這篇文章主要介紹了java實(shí)現(xiàn)socket從服務(wù)器連續(xù)獲取消息的示例,需要的朋友可以參考下2014-04-04
新建Maven工程出現(xiàn)Process?Terminated的問(wèn)題解決
當(dāng)Maven出現(xiàn)"Process terminated"錯(cuò)誤時(shí),這通常是由于配置文件或路徑錯(cuò)誤導(dǎo)致的,本文主要介紹了新建Maven工程出現(xiàn)Process?Terminated的問(wèn)題解決,感興趣的可以了解一下2024-04-04

