Logback有时不会写入日志文件,有时也不会滚动日志文件

时间:2010-08-25 14:08:25

标签: java file logging disk logback

有时当我启动我的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: %d{yyyy-MM-dd HH:mm:ss}%5p [%t] (%F:%L) - %msg%n -->
      <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] \(%class{25}:%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.%d{yyyy-MM-dd}.gz</fileNamePattern>
    </rollingPolicy>
  </appender>
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] \(%class{25}:%line\) - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="file"/>
    <appender-ref ref="console"/>
  </root>
</configuration>

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

2 个答案:

答案 0 :(得分:9)

要调试此问题,请使用<configuration debug="true">,不要重定向stdout。当它解析配置并出现问题时,Logback会在那里打印消息。

答案 1 :(得分:0)

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