あなたの例のおかげで、異なるロガー出力を異なるファイルにルーティングするloggernameベースのディスクリミネータのソリューションを実装しました。ログバックのドキュメントは非常に冗長ですが、私はこの重要な情報を見つけることができませんでした。あなたは確かにすでにyayitsweiによって言及された解決策を見つけました。
logback.xml:
[...]
<timestamp key="startTimestamp" datePattern="yyyy-MM-dd"/>
<timestamp key="folderTimestamp" datePattern="MM-yyyy"/>
<property name="LOGDIR" value="/var/log/spock" />
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator class="com.enterprise.spock.LoggerNameBasedDiscriminator" />
<sift>
<appender name="FILE-${loggerName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOGDIR}/${loggerName}-${startTimestamp}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${LOGDIR}/${folderTimestamp}/${loggerName}-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
<maxFileSize>500KB</maxFileSize>
<maxHistory>100</maxHistory>
<totalSizeCap>50MB</totalSizeCap>
</rollingPolicy>
<encoder>
<charset>UTF-8</charset>
<pattern>%level %date{HH:mm:ss.SSS}: %msg %n</pattern>
</encoder>
</appender>
</sift>
</appender>
[...]
編集: 私は提案hereとしてSizeAndTimeBasedRollingPolicyでTimeBasedRollingPolicyを置き換えます。それには、少なくともログバック1.1.7が必要です。
これで得られるのは、作成された各ロガーのログファイルです。 すべてのログファイルは、/var/log/loggername-2017-08-03.logのようになります。
約500KBがファイルに書き込まれると、gz-zipファイルとして/var/log/loggername/08-2017/loggername-2017-08-03-0.log.gzにアーカイブされます。
gz-zipファイル名の最後の0は、上記の<fileNamePattern>
の%i
です。 %i
がなければ動作しません。何か動作しない場合は、logback.xmlに<configuration debug=true>
を使用してください。
SiftingAppender内にRollingFileAppenderをネストできます。 – yayitswei