web-dev-qa-db-ja.com

新しいログがない限り、TimeBasedRollingPolicyはローリングしません

これが私の設定です:

<appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <append>true</append>
    <file>mylogs.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -->
        <fileNamePattern>mylogs-%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>

        <!-- keep 30 days' worth of history -->
        <maxHistory>30</maxHistory>
    </rollingPolicy>

    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} [%thread] - %M:%L - %msg%n</pattern>
    </encoder>
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>INFO</level>
    </filter>
</appender>

ここにあるログバックのドキュメント( http://logback.qos.ch/manual/appenders.html#TimeBasedRollingPolicy )によると、ファイルは私の%d{yyyy-MM-dd_HH-mm}fileNamePatternに基づいて毎分ロールオーバーされます。

私はこれがどのように機能するかを観察しました、そしてここに私の発見があります:

  • ログファイルはすぐには作成されません。
  • 新しいログが到着したときの直前のログファイルのみを作成します。 (たとえば、午後11時53分にログがあり、現在は午後11時55分です。午後11時54分に達すると、午後11時53分に新しいログファイルがすぐに作成されませんが、新しいログが後で来たときは、次のように言います。 11:56 pm、11:53pmのファイルが作成されます。)

私は何かが足りないのですか、それは毎分ログファイルを作成すると思いましたか?

12
villager

リンクしたドキュメントのセクションをさらに下にスクロールすると、次のように表示されます。

さまざまな技術的理由により、ロールオーバーはクロック駆動型ではなく、ロギングイベントの到着に依存します。たとえば、2002年3月8日に、fileNamePatternがyyyy-MM-dd(毎日のロールオーバー)に設定されているとすると、午前0時以降に最初のイベントが到着するとロールオーバーがトリガーされます。たとえば、午前0時から23分47秒の間にロギングイベントがない場合、ロールオーバーは実際には午前0時ではなく3月9日の午前00時23分47秒に発生します。したがって、イベントの到着率によっては、ロールオーバーがある程度の遅延でトリガーされる場合があります。ただし、遅延に関係なく、特定の期間中に生成されたすべてのログイベントがその期間を区切る正しいファイルに出力されるという意味で、ロールオーバーアルゴリズムは正しいことがわかっています。

短いバージョン:時間によってトリガーされるのではなく、logging-eventによってトリガーされます。ロギングイベントがないということは、ロールオーバーがないことを意味します。 1分ごとにロールオーバーするように設定された構成では、ログイベントが到着しない1分間のファイルはありません。

19
sheltem

入力<file>プロパティは必要ありません。

それを省略すると、問題を解決できます

RollingFileAppender(TimeBasedRollingPolicyの親)のファイルプロパティは、設定または省略できることに注意してください。含まれているFileAppenderのfileプロパティを設定することにより、アクティブなログファイルの場所とアーカイブされたログファイルの場所を分離できます。現在のログは、常にfileプロパティで指定されたファイルを対象としています。したがって、現在アクティブなログファイルの名前は時間の経過とともに変更されません。ただし、fileプロパティを省略することを選択した場合、アクティブなファイルは、fileNamePatternの値に基づいて期間ごとに新たに計算されます。以下の例は、この点を明確にする必要があります。

5
jake