logback 有时不写入日志文件,有时不滚动日志文件

Posted

技术标签:

【中文标题】logback 有时不写入日志文件,有时不滚动日志文件【英文标题】:Logback sometimes does not write to the log file, and sometimes does not roll the log file 【发布时间】:2011-04-03 18:14:41 【问题描述】:

有时当我启动我的 java 应用程序时,logback 拒绝向我的日志文件写入任何内容。有时它还拒绝在午夜(或午夜后的第一个日志事件)滚动日志文件,这会导致日志事件丢失到空白处。当我在 logbacks 无法滚动日志时查看我的主日志文件时,它将有一个像 23:59 这样的时间,昨天的日期,并且在那之后的任何和所有日志记录语句都将无法挽回地丢失。我有一个相当简单的配置文件,它看起来是正确的。它肯定应该是正确的,因为它在大多数情况下都有效。

这是我的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!--See http://logback.qos.ch/manual/appenders.html#RollingFileAppender-->
    <!--and http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy-->
    <!--for further documentation-->
    <append>true</append>
    <File>aggregator.log</File>
    <encoder>
        <!-- was: %dyyyy-MM-dd HH:mm:ss%5p [%t] (%F:%L) - %msg%n -->
      <pattern>%dyyyy-MM-dd HH:mm:ss %-5level [%thread] \(%class25:%line\) - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- By setting the name to .gz here, we get free compression. -->
      <fileNamePattern>aggregator.log.%dyyyy-MM-dd.gz</fileNamePattern>
    </rollingPolicy>
  </appender>
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%dyyyy-MM-dd HH:mm:ss %-5level [%thread] \(%class25:%line\) - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="file"/>
    <appender-ref ref="console"/>
  </root>
</configuration>

不幸的是,我无法可靠地重现此错误,因此调试它有点困难。有人可以告诉我我做错了什么,或者还有什么问题?如果有任何帮助,我将 STDOUT 和 STDERR 重定向到 /dev/null (我在 linux 上运行,顺便说一句)。

【问题讨论】:

我刚刚更新到最新的点发布。希望这会有所帮助。 【参考方案1】:

要调试问题,请使用&lt;configuration debug="true"&gt; 并且不要重定向标准输出。 Logback 会在解析配置以及出现问题时打印消息。

【讨论】:

我意识到我可以做到这一点,但由于我无法重现此行为,因此即使有所有信息,也很难排除故障。但是,我会尝试... 我用调试运行并查看了输出,并且 logback 没有抱怨。这是意料之中的,因为配置在大多数情况下都能正常工作。 运行它并等待它中断。然后,您应该会在标准输出上看到一个错误。【参考方案2】:

事实证明,这与 logback 几乎没有关系。问题是我有一个 .policy 文件,它没有为应用程序指定适当的权限。我认为我可以旋转文件的时候是我手动移动或删除以前的文件的时候。我通过确保 logback 有足够的权限来轮换自己的日志来解决这个问题。

【讨论】:

以上是关于logback 有时不写入日志文件,有时不滚动日志文件的主要内容,如果未能解决你的问题,请参考以下文章

Logback-android:日志未写入文件

logback按天生成日志系统重启之后还会生成吗

logback KafkaAppender 写入Kafka队列,集中日志输出.

springboot的日志框架slf4j (使用logback输出日志以及使用)

logback日志写入数据库(mysql)配置

spring boot logback日志logback 生成日志文件在本项目下,而不在指定的日志文件目录下/指定日志文件到达最大值后不按照配置进行切割