如何在方法级别上分隔日志输出(在一个类中使用不同的日志文件)

时间:2017-06-23 18:56:22

标签: spring logging spring-boot logback

我正在尝试从类中登录到两个不同的记录器。我有一个类并定义了两个方法,并尝试将消息从一个方法记录到一个日志文件,并从另一个方法记录到不同的日志文件。

这是我的代码:

insert into TServiceInstruments (column1, column2, column3)
values (1, 2, 3)

这是我的logback-spring文件:

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


    public void empSalInfo(){
            logger.info("employee info.."); // this should log into SalaryLogAppender 
        }

        public void empDeptInfo(){
            logger.info("dept info"); // this should log into DeptLogAppender
        }

1 个答案:

答案 0 :(得分:1)

如果要写入不同的日志文件,首先需要使用不同的(文件)附加程序来分隔输出。

这是一个简单的logback-spring.xml,它提供了多个appender和相关的记录器:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="application.log"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>

    <appender name="oneAppender" class="ch.qos.logback.core.FileAppender">
        <file>one.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="anotherAppender" class="ch.qos.logback.core.FileAppender">
        <file>another.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <logger name="oneLogger" level="ALL" additivity="false">
        <appender-ref ref="oneAppender" />
    </logger>

    <logger name="anotherLogger" level="ALL" additivity="false">
        <appender-ref ref="anotherAppender" />
    </logger>

</configuration>

(默认)root记录器将所有常见的应用程序消息转发到公共&#34; application.log&#34;,例如应用程序启动消息等。

然后,有两个显式文件追加器(oneAppender&amp; anotherAppender)绑定到不同的文件(one.log&amp; another.log)。

至少有两个记录器(oneLogger&amp; anotherLogger)绑定到这些appender,它们的名称可以引用它们将某些消息传递给不同的日志文件。

使用该配置,您现在可以实现日志记录,最简单的方法是直接在业务层内创建两个单独的Logger实例:

final Logger oneLogger = LoggerFactory.getLogger("oneLogger");

final Logger anotherLogger = LoggerFactory.getLogger("anotherLogger");

public void empSalInfo(){
    oneLogger.info("employee info.."); // this should log into SalaryLogAppender 
}

public void empDeptInfo(){
    anotherLogger.info("dept info"); // this should log into DeptLogAppender
}

但是,由于这将是某种冗长且容易出错的问题,因此可以考虑使用Spring AOP拦截您的业务代码(如果它由Spring管理),以保持其对日志记录的关注。