簡體   English   中英

使用 Spring Boot.log 將日志保存到文件中。 問題:Log4j 使用@Slf4j 時不記錄到文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM