【问题标题】:Using logback to log to two different log files使用 logback 记录到两个不同的日志文件
【发布时间】:2022-01-02 21:17:57
【问题描述】:

使用下面的 logback.xml :

<Configuration status="INFO">
    <Appenders>

        <appender name="log1" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>log1.log</file>
            <append>true</append>
        </appender>

        <appender name="log2" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>log2.log</file>
            <append>true</append>
        </appender>

        <logger name="logger1" level="INFO" additivity="true">
            <appender-ref ref="log1"/>
        </logger>
        <logger name="logger2" level="INFO" additivity="true">
            <appender-ref ref="log2"/>
        </logger>

    </Appenders>

    <root level="info">
        <appender-ref ref="logger1"/>
        <appender-ref ref="logger2"/>
    </root>

</Configuration>

有依赖关系:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.10</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-simple</artifactId>
    <version>1.7.32</version>
</dependency>

我正在尝试使用代码将消息记录到两个不同的文件:

Logger log1 = LoggerFactory.getLogger("logger1");
Logger log2 = LoggerFactory.getLogger("logger2");

log1.info("test1");
log2.info("test2");

但是文件 log1.log 和 log2.log 没有被创建。

这是控制台输出:

[as-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started
[main] INFO logger1 - test1
[main] INFO logger2 - test2

我不确定为什么要打印消息 [as-akka.actor.default-dispatcher-3] INFO akka.event.slf4j.Slf4jLogger - Slf4jLogger started,可能是因为我在项目中使用了 Akka?

我是否正确设置了logback.xml 以启用记录到两个单独的日志文件?

我已查看问题Logback to log different messages to two files,但由于此问题的配置不同,因此未回答此问题。

【问题讨论】:

  • 您的配置文件看起来像是 Log4j 和 Logback 语法的混合(即无效)。您是否尝试根据您引用的问题调整配置?此外,您使用 slf4j-simple 绑定,它不使用 Logback。另一方面,logback-classic(包含 Logback 的 SLF4J 绑定)丢失了。
  • 启用 logback debug 选项以查看 logback 是如何加载的

标签: java logging log4j akka logback


【解决方案1】:

这个 logback.xml 将日志分成两个单独的文件:

<?xml version="1.0"?>
<configuration>

    <appender name="logger1appender" class="ch.qos.logback.core.FileAppender">
        <file>logfile1.log</file>
        <append>false</append>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="logger2appender" class="ch.qos.logback.core.FileAppender">
        <file>logfile2.log</file>
        <append>false</append>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>


    <property name="pattern" value="%date{HH:mm:ss.SSS} %-5p %logger{36}
%X{akkaSource} [%file:%line] - %m%n"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%date{HH:mm:ss.SSS} %-5p %logger{36} %X{akkaSource} [%file:%line] - %m%n</pattern>
        </encoder>
    </appender>

    <logger name="logger1name" level="INFO" additivity="false">
        <appender-ref ref="logger1appender"/>
    </logger>
    <logger name="logger2name" level="INFO" additivity="false">
        <appender-ref ref="logger2appender"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

有依赖关系:

<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.2.10</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.32</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.10</version>
</dependency>

使用代码:

private static final Logger log1 = LoggerFactory.getLogger("logger1name");
private static final Logger log2 = LoggerFactory.getLogger("logger2name");

【讨论】:

    【解决方案2】:

    来自Googleresult 回答了你所有的问题...

    我希望,你知道,&lt;Configuration&gt;&lt;configuration&gt; 不是一回事,当你登录到文件时,控制台输出在某种程度上是不相关的......

    【讨论】:

      猜你喜欢
      • 2017-02-15
      • 2011-01-30
      • 2013-08-13
      • 2013-04-27
      • 2019-08-25
      • 1970-01-01
      • 2020-02-25
      相关资源
      最近更新 更多