Logback正在截断,而不是附加到日志文件

时间:2014-04-24 14:06:05

标签: java logback

我们在下面复制了一个简单的Logback配置。我的期望是应用程序将在启动时继续写入(即追加)日志文件。但是,当我们重新启动应用程序时,将丢弃现有文件,并且记录器会创建一个新文件。我的理解是默认情况下FileAppender会附加到日志文件中。甚至添加" true"并没有什么区别。我错过了什么吗?

<configuration>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <append>true</append>
    <File>${logDir}/${filename}.log</File>
    <encoder>
      <pattern>%d{yyyyMMdd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE" />
  </appender>

  <root level="INFO">
    <appender-ref ref="ASYNC"/>
  </root>
</configuration>

1 个答案:

答案 0 :(得分:0)

Luhar,

我不确定你是否还在为此寻找答案,因为我发现问题已经被问了很久。但我最近做了一些logback的工作,偶然发现了这个未解决的问题。你想要做的事情看起来非常简单,所以我想我会给它一个旋转,看看发生了什么。

使用以下logback配置和附带的代码,我能够很好地附加到日志文件。

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <File>test.log</File>
        <encoder>
            <pattern>%d{yyyyMMdd-HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
                %msg%n</pattern>
        </encoder>
    </appender>
    <appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FILE" />
    </appender>
    <root level="INFO">
        <appender-ref ref="ASYNC" />
    </root>
</configuration>

使用上述配置的简单Java类:

public class App {

    static Logger logger = LoggerFactory.getLogger("SimpleTest");

    public static void main(String[] args) {
        logger.info("This is an INFO statement");
        logger.warn("This is a WARN statement");
        logger.error("This is an ERROR statement");

        try {
            Thread.sleep(2000);     
            // make sure the AsyncAppender queue is flushed
            // before program exits
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

以下是程序运行3次后的日志文件。

20141222-22:32:10.391 [main] INFO SimpleTest -                 这是一个INFO声明

20141222-22:32:10.393 [main] WARN SimpleTest -                 这是一个WARN声明

20141222-22:32:10.393 [main] ERROR SimpleTest -                 这是一个错误陈述

20141222-22:32:18.558 [main] INFO SimpleTest -                 这是一个INFO声明

20141222-22:32:18.560 [main] WARN SimpleTest -                 这是一个WARN声明

20141222-22:32:18.560 [main] ERROR SimpleTest -                 这是一个错误陈述

20141222-22:32:23.192 [main] INFO SimpleTest -                 这是一个INFO声明

20141222-22:32:23.194 [main] WARN SimpleTest -                 这是一个WARN声明

20141222-22:32:23.194 [main] ERROR SimpleTest -                 这是一个错误陈述

所以我认为logback配置工作正常。希望这可以帮助!