Log4jの毎日のローテーションと毎月の保存(ファイルアペンダー付き)


11

log4jアペンダーのいずれかを使用して、特定のローテーション時間と保持制限でログを書き込むことは可能ですか?
目標は次のとおりです。

  • 毎日のログファイルを持っています。深夜に新しいログ用の新しいファイルを作成する
  • ログファイルを保持し、一定時間後に自動的に削除する。X日より古いログファイルを削除します(例:30日)

ローテーションは可能のようですが、log4jでは保持時間の制限は不可能です

log4jバージョンは1.2です。

回答:


4

このlog4Jプロパティは私のために働きます

log4j.rootLogger=DEBUG, stdout, file

# Redirect log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=/opt/cronjob/logs/cronlogs.log
log4j.appender.file.MaxFileSize=1028MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

4

私の回答はに基づいてlogbacklog4jます。(混乱してしまい申し訳ありません。)


を使用すると、ログのローテーションを実現できますTimeBasedRollingPolicy

例えば)

<appender name="SYSTEMLOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>./logs/system.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>./logs/system.log.%d{yyyy-MM-dd}</fileNamePattern>
    <!-- keep last 30 days of logs -->
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <charset>UTF-8</charset>
      <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</Pattern>
  </encoder>
</appender>

深夜にローテーションし、30日以上経過したログファイルを削除します。

fileNamePattern:ロールオーバー期間は、fileNamePatternの値から推測されます

maxHistory:オプションのmaxHistoryプロパティは、古いファイルを非同期で削除して、保持するアーカイブファイルの最大数を制御します。たとえば、毎月のロールオーバーを指定し、maxHistoryを6に設定した場合、6か月より古いアーカイブファイルは6か月分保存され、削除されます。古いアーカイブログファイルが削除されるため、ログファイルのアーカイブを目的として作成されたフォルダは、適宜削除されます。

TimeBasedRollingPolicyの詳細を確認できます


@PaulEdison好奇心旺盛、これらの設定は機能していませんか?
javaGroup456

1
この解決策は、log4jではなくlogbackに基づいています
benbenw

うわぁ... @benbenw正解です!なぜこの質問をログバックと誤解していたのかわかりません。log4jについては彼/彼女の回答を参照してください。
となりもち

3

はい、できます!

ファイル: project->src->main->resources->logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>folderName/logFile.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>folderName/archive/logFile.%d{dd-MM-yyyy}.log</fileNamePattern>
      <!-- keep last 30 days of logs -->
      <maxHistory>30</maxHistory>
    </rollingPolicy>

    <!-- filter by level (optional) -->
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>DEBUG</level>
    </filter>

    <encoder>
      <pattern>%date %-5level [%thread] %file:%L [%M] - %msg%n</pattern>
    </encoder>
  </appender>

  <!-- you can filter by type of level (optional) -->
  <root level="DEBUG">
    <appender-ref ref="FILE"/>
  </root>
</configuration>

詳細については、ドキュメントを参照してください:TimeBasedRollingPolicy

JavaDoc:TimeBasedRollingPolicy


1

答えのほとんどはログバックに基づいています。しかし、問題はlog4j 1.2(古い...)についてです

DailyRollingFileAppenderに関する言及の回答も機能しません。 プロパティをorg.apache.log4j.DailyRollingFileAppenderサポートしていません。http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.htmlをMaxBackupIndex参照してください(これはRollingFileAppender

あなたは興味があるかもしれません: DailyRollingFileAppender -log4jでMaxBackupIndexを使用してください

可能な答え: Log4j RollingpolicyとMaxbackupIndex

しかし、おそらくslf4j log4j "エミュレーション"(http://www.slf4j.org/legacy.html#log4j-over-slf4j)を使用して、実装がはるかに簡単な場所でログを(コードを変更せずに)ログバックにルーティングする必要があります。 。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.