【问题标题】:Spring boot multiple log filesSpring Boot 多个日志文件
【发布时间】:2016-12-30 10:27:20
【问题描述】:

在我的带有“@Slf4j”注释类的 Spring Boot 项目中,对于某些类,我想登录到不同的文件。但无法弄清楚如何做到这一点。我有一个 logback-spring.xml 文件,它是从我的属性文件中引用的,如下所示:

logging.config= path/to/logback-spring.xml
logging.file=myCurrentLogFile.log

我现在必须创建另一个 logback-spring.xml 文件吗?或者我可以在当前文件中配置它,如果那么我该如何选择何时使用哪个记录器。

【问题讨论】:

  • 您似乎正在使用 Lombok 为您的班级声明一个记录器。您可以使用注释中的topic 参数选择不同的记录器:@XSlf4j(topic="nameOfLogger"). 来自文档:projectlombok.org/features/log。将此与以下有关如何通过在您的配置中声明另一个 appender 来创建另一个记录器的答案结合起来。

标签: spring logging spring-boot logback


【解决方案1】:

如果你想拥有两个不同的文件,你需要在标签<appender>下添加以下代码:

<File name="FILE-AUDIT-SUIVI" fileName="${LOGS_HOME}myProject_audit.log">
        <PatternLayout>
            <pattern>
                ${LOGS_HOME}
            </pattern>
        </PatternLayout>
    </File>

<RollingFile name="FileAppender" fileName="${LOGS_HOME}archived/myProject_audit.log"
        filePattern="${LOGS_HOME}archived/myProject_audit.%d{yyyy-MM-dd}.%i.log">
        <PatternLayout>
            <Pattern>${LOGS_HOME}</Pattern>
        </PatternLayout>
        <Policies>
            <SizeBasedTriggeringPolicy size="10MB" />
        </Policies>
        <DefaultRolloverStrategy max="1" />
    </RollingFile>

【讨论】:

    【解决方案2】:

    只需添加另一个记录器和附加器。 例如我使用了以下logback.xml

    <property name="LOGS_HOME" value="/var/applications/myProject/applogs/" />
    
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </layout>
    </appender>
    
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_HOME}myProject_log.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n
            </Pattern>
        </encoder>
    
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_HOME}myProject_log.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    
    <appender name="FILE-AUDIT" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS_HOME}myProject_audit.log</file>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>
                %d{yyyy-MM-dd HH:mm:ss};%msg%n
            </Pattern>
        </encoder>
    
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- rollover daily -->
            <fileNamePattern>${LOGS_HOME}myProject_audit.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>100MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>
    
    <logger name="com.myCompany.myProject" level="info" additivity="false">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </logger>
    
    <logger name="audit-log" level="info" additivity="false">
        <appender-ref ref="FILE-AUDIT" />
        <appender-ref ref="STDOUT" />
    </logger>
    
    <root level="error">
        <appender-ref ref="FILE" />
        <appender-ref ref="STDOUT" />
    </root>
    

    在代码中,您可以通过以下方式访问记录器:

    private static Logger audit = LoggerFactory.getLogger("audit-log");
    

    这将获得audit-log 记录器并使用FILE-AUDIT 附加程序。

    “标准”附加程序用于指定包中的任何类:

    private static Logger logger = LoggerFactory.getLogger(MyApplication.class);
    

    这将使用 &lt;logger name="com.myCompany.myProject" level="info" additivity="false"&gt; 并且显然是 FILE 附加程序。

    【讨论】:

    • 谢谢,但我尝试了您的代码,但在任何地方都看不到新的审核日志文件。也许我需要在属性中定义这样的东西? logging.config=路径
    • @Spring 看看&lt;property name="LOGS_HOME" value="/var/applications/myProject/applogs/" /&gt; 文件应该在/var/applications/myProject/applogs/myProject_audit.log 或者你设置的任何路径LOGS_HOME。还要检查应用程序是否有权在目录中写入。
    • thx 但还是不行,我检查了权限(ls -la)它看起来和我的其他默认日志文件一样
    • 您是否使用private static Logger audit = LoggerFactory.getLogger("audit-log"); 记录某些内容?也尝试在调试模式下运行 logback:stackoverflow.com/questions/3802054/run-logback-in-debug
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多