2013-04-09 847 views
1

我使用SLF4J + Logback作为我的应用程序中的日志记录基础结构。 logback.xml有以下我的应用程序的内容:在SUSE Linux的和JRE 1.6运行在运行时删除日志文件,并且slf4j + logback不会再创建它

<?xml version="1.0" encoding="UTF-8" ?> 
<configuration scan="true" scanPeriod="5 seconds"> 
    <jmxConfigurator /> 
    <property name="DIR" value="${LOG_DATA_HOME}"/> 
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> 
     <file>${DIR}/loghome/last.log</file> 
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> 
      <fileNamePattern>${DIR}/loghome/log-%d{yyyy-MM-dd}.%i.log</fileNamePattern> 
      <timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> 
       <maxFileSize>10MB</maxFileSize> 
      </timeBasedFileNamingAndTriggeringPolicy> 
     </rollingPolicy> 
     <encoder> 
      <pattern>%-5level %date- %X{_diagKey} - %logger - %msg %n </pattern> 
     </encoder> 
    </appender> 
    <logger name="net.sf.ehcache" additivity="false"> 
     <level value="error" /> 
     <appender-ref ref="FILE" /> 
    </logger> 
    <root level="error"> 
     <appender-ref ref="FILE" /> 
    </root> 
</configuration> 

我的应用程序。

我的问题是:我在时间间隔(由于几个原因,如物理内存限制等)从文件系统中删除所有日志文件(包含最后一个文件),当我的应用程序运行时,但我的应用程序不创建日志重新启动我的应用程序时再次文件。

任何人都知道上述行为的原因和解决方案吗?

EDITED 我通过logbak的OnConsoleStatusListener有更多的细节:

11:00:33,640 |-ERROR in c.q.l.c.recovery[email protected] - IO failure while writing to file [\loghome\last.log] java.io.IOException: The handle is invalid 
    at java.io.IOException: The handle is invalid 
    at at java.io.FileOutputStream.writeBytes(Native Method) 
    at at java.io.FileOutputStream.write(FileOutputStream.java:260) 
    at at ch.qos.logback.core.recovery.ResilientOutputStreamBase.write(ResilientOutputStreamBase.java:52) 
    at at java.io.OutputStream.write(OutputStream.java:58) 
    at at ch.qos.logback.core.encoder.LayoutWrappingEncoder.doEncode(LayoutWrappingEncoder.java:103) 
    at at ch.qos.logback.core.OutputStreamAppender.writeOut(OutputStreamAppender.java:193) 
    at at ch.qos.logback.core.FileAppender.writeOut(FileAppender.java:220) 
    at at ch.qos.logback.core.OutputStreamAppender.subAppend(OutputStreamAppender.java:217) 
    at at ch.qos.logback.core.OutputStreamAppender.append(OutputStreamAppender.java:108) 
    at at ch.qos.logback.core.UnsynchronizedAppenderBase.doAppend(UnsynchronizedAppenderBase.java:88) 
    at at ch.qos.logback.core.spi.AppenderAttachableImpl.appendLoopOnAppenders(AppenderAttachableImpl.java:64) 
    at at ch.qos.logback.classic.Logger.appendLoopOnAppenders(Logger.java:285) 
    at at ch.qos.logback.classic.Logger.callAppenders(Logger.java:272) 
    at at ch.qos.logback.classic.Logger.buildLoggingEventAndAppend(Logger.java:473) 
    at at ch.qos.logback.classic.Logger.filterAndLog_0_Or3Plus(Logger.java:427) 
    at at ch.qos.logback.classic.Logger.debug(Logger.java:534) 
    at at Test.main(Test.java:17) 

回答

1

<configuration debug="true">是你的朋友。另请参阅relevant documentation

+0

我设置了'debug =“true”'但没有得到任何更多的信息。 – MJM 2013-04-09 11:39:58

+0

您使用的是哪种版本的logback? – Ceki 2013-04-09 13:12:24

+0

我使用logback 0.9.28 – MJM 2013-04-10 05:12:54

1

即使提问者提到即使在应用程序重新启动后日志还没有被重新创建,也存在稍微不同的问题,这与使用中的文件的unix/linux处理删除略有不同。

这当然不是从操作系统的角度看问题,而是应该由记录应用的logback一样,SLF4J等

实际上,你可以看到该类型的改进开放适当考虑logback here。这表明确实存在这样的情况,即您无法在Unix/Linux上随时删除日志文件并自动重新创建日志文件。

相关问题