感谢您的示例,我为基于记录器名称的鉴别器实现了一个解决方案,该鉴别器将不同的记录器输出路由到不同的文件。虽然 logback 的文档非常冗长,但我找不到这些基本信息。您肯定已经找到了 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>
[...]
编辑:我按照这里的建议将 TimeBasedRollingPolicy 替换为 SizeAndTimeBasedRollingPolicy 。为此,您至少需要 logback 1.1.7。
你得到的是每个创建的 Logger 的日志文件。每个日志文件将如下所示:/var/log/loggername-2017-08-03.log。
当大约 500KB 写入文件时,它将作为 gz-zip 文件归档到 /var/log/loggername/08-2017/loggername-2017-08-03-0.log.gz 中。
gz-zipfile-name 末尾的 0 是%i
上面的<fileNamePattern>
。没有%i
它是行不通的。<configuration debug=true>
如果某些东西不起作用,请记住在 logback.xml 中使用。