[英]Save logs to file with Spring Boot. Issue: Log4j do not log to file when I use @Slf4j
我將 Slf4j 與 spring 引導項目一起使用。 我管理了 log4j.properties,並且在控制台中有日志,但無法實現記錄到文件中。
log4j.properties
:
# Root logger option
log4j.rootLogger=INFO, ERROR, file, stdout
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${user.dir}/Log4j/log4j-test.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
#do not append the old file. Create a new log file everytime
log4j.appender.dest1.Append=false
# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%-4p] %d{dd-MM-yy HH:mm:ss} %t | %m%n
log4j2.formatMsgNoLookups=true
com.sun.jndi.rmi.object.trustURLCodebase=false
com.sun.jndi.cosnaming.object.trustURLCodebase=false
另外,我嘗試了這樣的選項:
log4j.appender.NotConsole=org.apache.log4j.RollingFileAppender
log4j.appender.NotConsole.fileName=Log4j/log4j-test.log
log4j.appender.NotConsole.maxFileSize=20MB
記錄示例:
@Slf4j
public class A{
public void m(){
log.info("log");
}
}
org.springframework.boot:spring-boot-starter-logging:jar:2.6.6:
無論如何,結果中沒有文件。
如何使用此解決方案正確創建文件日志記錄?
我找到了一個解決方案:
1.
首先,我們需要從依賴項中排除 logback。 Lockback 包含在spring-boot-starter-web
中,我們可以通過以下方式使用 gradle 來實現:
implementation ("org.springframework.boot:spring-boot-starter-web:${spring_boot_version}"){
exclude group:"org.apache.logging.log4j", module:"log4j-to-slf4j"
}
在我的例子中, logback
還提供了spring-boot-starter-validation
並且出於某種原因 gradle 不想從兩個依賴項中排除logback
。 在這種情況下,可行的解決方案是在configurations
塊中添加排除項:
configurations {
all {
exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
}
}
我添加了spring-boot-starter-log4j2
依賴項:
implementation "org.springframework.boot:spring-boot-starter-log4j2"
我在資源目錄中創建了log4j2-spring.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%style{%d{ISO8601}}{black} %highlight{%-5level }[%style{%t}{bright,blue}] %style{%C{1.}}{bright,yellow}: %msg%n%throwable" />
</Console>
<RollingFile name="RollingFile"
fileName="./logs/spring-boot-logger-log4j2.log"
filePattern="./logs/$${date:yyyy-MM}/spring-boot-logger-log4j2-%d{-dd-MMMM-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- rollover on startup, daily and when the file reaches
10 MegaBytes -->
<OnStartupTriggeringPolicy />
<SizeBasedTriggeringPolicy
size="10 MB" />
<TimeBasedTriggeringPolicy />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console" />
<AppenderRef ref="RollingFile" />
</Root>
<!-- LOG "com.proxy*" at TRACE level -->
<Logger name="com.proxy" level="trace"></Logger>
</Loggers>
</Configuration>
附言。 此解決方案使用spring_boot_version = '2.6.6'
進行測試
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.