1

SLF4J+Logbackをアプリケーションのロギング インフラストラクチャとして 使用しています。logback.xml私のアプリには次のコンテンツがあります:

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

Linux suse およびJRE 1.6.

私の質問は次のとおりです。アプリの実行中に(物理メモリの制限などのいくつかの理由で)時間間隔でファイルシステムからすべてのログファイル(最後のファイルを含む)を削除しましたが、アプリはログファイルを再度作成しませんアプリを再起動します。

上記の動作の理由とその解決策を知っている人はいますか?

EDITEDOnConsoleStatusListener私はlogbakの 詳細を取得します:

11:00:33,640 |-ERROR in c.q.l.c.recovery.ResilientFileOutputStream@17459938 - 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)
4

2 に答える 2

1

アプリケーションを再起動してもログが再作成されていないと質問者は述べましたが、使用中のファイルの削除を処理する unix/linux に固有の、少し異なる問題があります。

もちろん、これは OS の観点からの問題ではなく、logback、slf4j などのロギング アプリケーションによって適切に考慮されるべきです。

実際に、logback hereでそのタイプの改善が開かれていることを確認できます。これは、Unix/Linux でログ ファイルをその場で削除して、自動的に再作成することができない状況が実際にあることを示しています。

于 2015-02-27T10:00:49.493 に答える
1

<configuration debug="true">あなたの友達です。関連文書も参照してください。

于 2013-04-09T10:35:38.733 に答える