Logback 仅在文件大小上滚动
Logback roll only on file size
我正在使用 logback 1.0.13。我希望我的日志文件仅根据文件大小滚动。如果这需要 2 小时或 2 年,我不在乎。我不知道该怎么做。我的 appender 配置如下:
<appender name="serverFaultFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/folder/to/log/file.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/folder/to/log/file-%d{yyyy-MM}.%i.log</fileNamePattern>
<MaxHistory>2</MaxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
<MaxHistory>9</MaxHistory>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%p] [%d{ISO8601}] [%c] [%m]%n</pattern>
</encoder>
</appender>
此解决方案每月滚动一次,这不是我需要的。我尝试完全删除 -%d{dateformat} 修饰符,但文件甚至从未 created/logged 到。我尝试了修饰符 %G 和 %yyyy,但月度与 logback 显然允许我得到的一样细粒度(见此 bug report)。我错过了什么?
您需要 SizeBasedTriggeringPolicy:http://logback.qos.ch/manual/appenders.html#SizeBasedTriggeringPolicy,可能与 FixedWindowRollingPolicy 结合使用。
之前是评论,不确定它是否值得自己的回答,但在这里。 ;)
只是为了扩展 sheltem 的回答:
根据我的实验,您必须同时使用 FixedWindowRollingPolicy
和 SizedBasedTriggeringPolicy
,如记录 here。看来您不能将 SizedBasedTriggeringPolicy
与 SizeAndTimeBasedRollingPolicy
一起使用,例如:在我的情况下,日志记录失败。
您的 xml 文件中的典型示例可能是:
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../logs/MyProject/testrolling.html</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>../logs/MyProject/backup%i.htm
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder class="...
您的备份文件将被命名为:backup1.htm、backup2.htm 等
您似乎不能在 fileNamePattern
中包含“%d”格式化指令:我试过了,但记录失败。但是,根据文档,您必须包含“%i”格式化指令,这是有道理的。
很久以后
这可能是我太天真了,但我认为日志记录应用程序应该设计为默认产生输出,即始终解释指令,以便至少产生一些东西,而不是什么都不产生。
我正在使用 logback 1.0.13。我希望我的日志文件仅根据文件大小滚动。如果这需要 2 小时或 2 年,我不在乎。我不知道该怎么做。我的 appender 配置如下:
<appender name="serverFaultFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/folder/to/log/file.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/folder/to/log/file-%d{yyyy-MM}.%i.log</fileNamePattern>
<MaxHistory>2</MaxHistory>
<cleanHistoryOnStart>true</cleanHistoryOnStart>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
<MaxHistory>9</MaxHistory>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<pattern>[%p] [%d{ISO8601}] [%c] [%m]%n</pattern>
</encoder>
</appender>
此解决方案每月滚动一次,这不是我需要的。我尝试完全删除 -%d{dateformat} 修饰符,但文件甚至从未 created/logged 到。我尝试了修饰符 %G 和 %yyyy,但月度与 logback 显然允许我得到的一样细粒度(见此 bug report)。我错过了什么?
您需要 SizeBasedTriggeringPolicy:http://logback.qos.ch/manual/appenders.html#SizeBasedTriggeringPolicy,可能与 FixedWindowRollingPolicy 结合使用。
之前是评论,不确定它是否值得自己的回答,但在这里。 ;)
只是为了扩展 sheltem 的回答:
根据我的实验,您必须同时使用 FixedWindowRollingPolicy
和 SizedBasedTriggeringPolicy
,如记录 here。看来您不能将 SizedBasedTriggeringPolicy
与 SizeAndTimeBasedRollingPolicy
一起使用,例如:在我的情况下,日志记录失败。
您的 xml 文件中的典型示例可能是:
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>../logs/MyProject/testrolling.html</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>../logs/MyProject/backup%i.htm
</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<triggeringPolicy
class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder class="...
您的备份文件将被命名为:backup1.htm、backup2.htm 等
您似乎不能在 fileNamePattern
中包含“%d”格式化指令:我试过了,但记录失败。但是,根据文档,您必须包含“%i”格式化指令,这是有道理的。
很久以后
这可能是我太天真了,但我认为日志记录应用程序应该设计为默认产生输出,即始终解释指令,以便至少产生一些东西,而不是什么都不产生。