【问题标题】:Logback is truncating instead of appending to log fileLogback 正在截断而不是附加到日志文件
【发布时间】:2014-04-24 14:06:05
【问题描述】:

我们在下面复制了一个简单的 Logback 配置。我的期望是应用程序将在启动时继续写入(即追加)到日志文件。但是,当我们重新启动应用程序时,现有文件将被丢弃,记录器会创建一个新文件。我的理解是 FileAppender 默认附加到日志文件中。即使添加“真实”也没有什么不同。我错过了什么吗?

<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>

【问题讨论】:

  • 感谢 vikingsteve - 我不想实施基于时间或大小的滚动策略。只需附加到文件而不是在启动时截断并写入文件。我在 RollingFileAppender 中看不到任何可以在不编写自己的 appender 的情况下使用的东西。

标签: java logback


【解决方案1】:

卢哈尔,

不确定您是否仍在为此寻找答案,因为我看到这个问题已经问了很久了。但我最近在 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 [主要] 信息 SimpleTest - 这是一条 INFO 语句

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

20141222-22:32:10.393 [main] 错误 SimpleTest - 这是一条错误语句

20141222-22:32:18.558 [主要] 信息 SimpleTest - 这是一条 INFO 语句

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

20141222-22:32:18.560 [main] 错误 SimpleTest - 这是一条错误语句

20141222-22:32:23.192 [主要] 信息 SimpleTest - 这是一条 INFO 语句

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

20141222-22:32:23.194 [main] 错误 SimpleTest - 这是一条错误语句

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

【讨论】:

    猜你喜欢
    • 2016-07-29
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    • 2019-10-28
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多