springboot整合log4j的踩坑實戰(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 默認自己內部添加了對日志的支持,需要將其全部剔除掉,不然會影響 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、日志打印記錄
根據自己的需求進行相關的配置,這里需要注意的是使用 xml 文件進行配置,使用 properties 有坑沒爬起來,文件名自定義,沒有啥要求,都會在配置文件中進行指定的。
<?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 的項目配置文件中進行配置的指定。
logging: config: classpath:log4j.xml
到這里完成對日志的整體配置,啟動項目通過下面語句拿到日志對象即可進行日志的打印輸出。
private final Logger LOGGING = LoggerFactory.getLogger(ArticleController.class);
補充:log4j調優(yōu)和注意事項
日志模式-同步/異步
log4j2提供了AsyncAppender和AsyncLogger以及全局異步,開啟方式如下:
- 同步模式:默認配置即為同步模式,即沒有使用任何AsyncAppender和AsyncLogger。
- 全局異步:配置按照同步方式配,通過添加jvm啟動參數即可開啟全局異步,無需修改配置和應用。
- 混合異步:使用異步Logger和同步Logger的混合配置,且不開啟全局異步,即Logger配置中部分AsyncLogger,部分Logger。
日志模式使用注意事項:
- 如果使用異步,建議使用AsyncLogger實現而不是AsyncAppender。
- 如果使用同步,AsyncLogger、AsyncAppender和全局異步只能使用一種,不可以同時配置AsyncAppender和AsyncLogger,或者配置了異步的情況下啟用了全局異步。
日志滾動和清除策略
log4j2提供了基于文件大小的滾動策略和基于時間的滾動策略,也可以二者并用,這里給出基于大小的滾動策略配置和基于大小/時間雙滾動策略配置:
- 基于大小的滾動策略:按照大小滾動,啟用壓縮,并最多保留N個文件
- 基于大小/時間雙滾動滾動策略:按照大小和時間滾動,啟用壓縮,單位時間內控制最多保留日志個數并控制總的日志留存時間。
總結
到此這篇關于springboot整合log4j踩坑的文章就介紹到這了,更多相關springboot整合log4j踩坑內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java實現百度云OCR文字識別 高精度OCR識別身份證信息
這篇文章主要為大家詳細介紹了java實現百度云OCR文字識別,高精度OCR識別身份證信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-11-11spring mvc中的@PathVariable獲得請求url中的動態(tài)參數
本文主要介紹了spring mvc中的@PathVariable獲得請求url中的動態(tài)參數的代碼。具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02詳解Spring Boot應用的啟動和停止(start啟動)
這篇文章主要介紹了詳解Spring Boot應用的啟動和停止(start啟動),小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-12-12