21

私はJava SOAPベースのWebサービスアプリケーションに取り組んでおり、参照用のログとしてstdoutをテキストファイルに書き込んでいます。そのファイルは非常に大きくなっているので、ファイルのサイズを確認する必要があります...たとえば、ファイル サイズが 10 Mb を超える場合は、別のファイルを作成する必要があります。

このように、10 個のファイルになるまで、10 個のファイルを作成する必要があります。10 個のファイルに達したら、最初のファイルを削除して、もう一度作成を開始する必要があります...

いいえの後にファイルを削除するにはどうすればよいですか。ファイルの数は 10 になりますか?

4

6 に答える 6

26

これを行うにはlogbackを使用します。以下の例は、時間ベースのローリング ポリシーです。ログ中に出力するデータの量によっては、これがそのまま機能する場合があります。

また、おまけとして、私の構成ファイルはログを HTML に変換して、ログ ファイルを調べたい管理者が簡単に表示できるようにします。

構成ファイルの関連部分:

 <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs\logFile.html</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <!-- daily rollover -- >
        <fileNamePattern>logs\logFile.%d{yyyy-MM-dd}.%i.html</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <!-- or whenever the file size reaches 10MB -- >
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <!-- keep 10 days worth of history -->
        <maxHistory>10</maxHistory>
    </rollingPolicy>

    <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
        <charset>UTF-8</charset>
        <layout class="ch.qos.logback.classic.html.HTMLLayout">
            <pattern>%d{HH:mm:ss.SSS}%thread%level%logger%line%msg</pattern>
        </layout>           
    </encoder>
</appender> 

<root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
</root>

関連する Maven の依存関係:

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.0.12</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.12</version>
    </dependency>
于 2013-05-13T12:59:02.357 に答える
13

Log4J を使用するように指示する多くの回答が表示されますが、Java 独自のロガーを使用してFileHandlerを作成するだけでこれを行うことができます。

Handler handler =
    new FileHandler("%h/MyService-%g.log", 10 * 1024 * 1024, 10);
handler.setLevel(Level.ALL);
Logger.getLogger("").addHandler(handler);
于 2013-05-13T14:05:55.063 に答える
5

log4j.xml では、次のことを試すことができます。

<appender name="fileappender" class="org.apache.log4j.RollingFileAppender">
      <param name="file" value="applog.log"/>
      <param name="Append" value="true" />
      <param name="MaxBackupIndex" value="10"/>

      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
      </layout>
   </appender>

この値は、ローテーションされたログ ファイルを 10 個だけ保持するように log4j.xml に指示します。

または、(xml の代わりに) プロパティ ファイルを使用している場合

log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=applog.log
log4j.appender.File.Append=true
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c] %m%n
log4j.appender.[appenderName].MaxBackupIndex = 10
于 2013-05-15T11:32:08.337 に答える
2

ほとんどのロギング フレームワークは、探しているものを提供します。logback では、RollingFileAppender を適切に構成することでそれを達成できるはずです。

RollingFileAppender は、ログ ファイルをロールオーバーする機能を備えた FileAppender を拡張します。たとえば、RollingFileAppender は、log.txt ファイルという名前のファイルにログを記録し、特定の条件が満たされると、ログ ターゲットを別のファイルに変更できます。

RollingPolicy は、ファイルの移動と名前変更を含むロールオーバー手順を担当します。

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

于 2013-05-13T12:48:58.533 に答える
2

Log4jはこれを行うことができます。具体的にはRollingFileAppenderクラスです。

于 2013-05-13T13:05:52.323 に答える