1

1 分経過した後、または 1MB のサイズを超えた後にログをロールしたいと考えています。ただし、以下の構成では、サイズを考慮して最初のログのみが作成されます。まあ言ってみれば:

myapp.2012-11-21_15-07.log (サイズ:1026KB~1MB)
myapp.log (サイズ:89KB)

時間が経過し (ただし、まだその分以内です)、ログがいっぱいになり (1MB を超えます)、別のファイルは作成されません。サイズに関係なく、時間を超えた場合にのみ別のファイルが作成されます。
これはバグですか、それとも意図した機能ですか? logback を使用してこれを構成するにはどうすればよいですか? カスタム実装が必要ですか?

1分経過または1MBのサイズを超えた後にログをロールしたい場合、現在のマニュアルを読んだ限り、次の構成を行います。

<configuration>

<appender name="file"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${catalina.base}/logs/myapp.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${catalina.base}/logs/myapp.%d{yyyy-MM-dd_HH-mm}.log</fileNamePattern>

        <maxHistory>90</maxHistory>

        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>1MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>

    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>
</appender>

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%-5level %date{ISO8601} [%thread]: [%class: %method] %message%n</pattern>
    </encoder>
</appender>

<logger name="org.springframework.core">
    <level value="all"/>
</logger>

<logger name="org.springframework.beans">
    <level value="all"/>
</logger>

<logger name="org.springframework.context">
    <level value="all"/>
</logger>

<logger name="org.springframework.web">
    <level value="all"/>
</logger>
<root level="error,info,debug">
    <appender-ref ref="file"/>
    <!--   <appender-ref ref="console"/>   -->
</root>
</configuration>

依存関係 (logback の力を得るためにそれを使用している各依存関係で commons-logging を除外しています - 以下には示されていません):

    <!-- LOGGING -->
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.0</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.6.6</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.6.6</version>
    </dependency>
    <!--END LOGGING-->

いくつかの追加情報:
1.0.7 バージョンも試しました (中央リポジトリからは入手できませんが、最後のバージョンはローカルの Maven リポジトリに手動で含める必要がありました) が、同じことが起こりました。
私のプロジェクトは 0.9.11 バージョンの logback を使用していましたが、有効なドキュメントやマニュアルが見つからなかったため、ローリング ポリシーを設定できませんでした。おそらく、レガシー依存関​​係を扱う必要がある人のために、古いマニュアルを指摘する人もいるでしょう。

敬具、
デスポット

4

1 に答える 1

1

SizeAndTimeBasedFNATP を使用するようにローリング ポリシーを設定する必要があります

ここに例を含むドキュメントがあります

http://logback.qos.ch/manual/appenders.html#SizeAndTimeBasedFNATP

%i がありません:

<fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>

「%d」に加えて「%i」変換トークンに注意してください。現在の期間が終了する前に現在のログ ファイルが maxFileSize に達するたびに、0 から始まる増加するインデックスでアーカイブされます。

于 2012-11-22T08:27:19.393 に答える