首页 > 解决方案 > 如何在spring boot中打印2个不同文件中2个类的日志

问题描述

我在 application.properties 中设置了 logging.file=C:/usr/local/tomcat/logs/hib.log 并在类中设置如下

private static final Logger logger = LogManager.getLogger(ChargeMasterController.class);

    logger.info("Total time taken for  is ---------------------------" + time  + " ms");

日志在作为 logging.file 提到的路径中打印得很好。

现在我想在 2 个不同的文件中为 2 个不同的类(在同一个包中)打印我的日志,如何在 application.properties 中设置 2 个 logging.file

标签: spring-bootlogging

解决方案


你不能用 Spring 提供的配置来做到这一点。但是由于spring-boot-starter-logging默认使用 Logback,您可以使用 Logback 配置来代替并定义多个 appender,例如:

<appender name="FILE1" class="ch.qos.logback.core.FileAppender">
    <file>log1.log</file>
    <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="FILE2" class="ch.qos.logback.core.FileAppender">
    <file>log2.log</file>
    <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="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>

之后,您可以将FILE1appender 用于第一堂课,FILE2将 appender 用于第二堂课以及STDOUT所有其他课程。这可以通过定义记录器来完成:

<logger name="com.example.pkg.ClassName1" additivity="false" level="info">
    <appender-ref ref="FILE1" />
</logger>
<logger name="com.example.pkg.ClassName2" additivity="false" level="info">
    <appender-ref ref="FILE2" />
</logger>
<root level="INFO">
    <appender-ref ref="STDOUT" />
</root>

如您所见,根记录器旁边有两个记录器,分别称为com.example.pkg.ClassName1com.example.pkg.ClassName2。这些应该与应该记录到单独文件的类的名称相匹配。

additivity="false"确保发送到log1.log或不发送到控制台的日志很重要,log2.log因为它们也会匹配根记录器。

此配置可以放在logback.xml类路径上的文件中(例如。src/main/resources)。或者,您也可以使用 中的logging.config属性来配置位置application.properties。例如:

logging.config=file:/path/to/logback.conf

或者,如果您想在类路径上使用任意位置:

logging.config=classpath:my/logback.conf

推荐阅读