回答:
この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
私の回答はに基づいてlogback
いlog4j
ます。(混乱してしまい申し訳ありません。)
を使用すると、ログのローテーションを実現できます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の詳細を確認できます
はい、できます!
ファイル: 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
答えのほとんどはログバックに基づいています。しかし、問題は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)を使用して、実装がはるかに簡単な場所でログを(コードを変更せずに)ログバックにルーティングする必要があります。 。