logback触发器日志滚动

logback本身只提供了两种文件的rolling策略:FixedWindowRollingPolicy和 TimeBasedRollingPolicy,另外提供了一种触发器策略SizeBasedTriggeringPolicy.由于log文件记录有回 滚信息,因此我希望能够每一次执行导入程序就产生一个新的log文件并且将原有的log文件进行备份,实际上也就是每次启动程序就roll一下log文 件。显然以上策略均无法满足我的需求,只能自己写了。
FixedWindowRollingPolicy是一个很简单的日志滚动策略,每次 触发器触发滚动事件时,则将log滚动一次。因此决定使用这个滚动策略来配合一个自定义的触发器策略实现我的需求。
首先,我们熟悉下 FixedWindowRollingPolicy及触发器的配置,下面是官网的一个sample:
官方地址:http://logback.qos.ch/manual/appenders.html<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> //<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>
其他没啥好说的,注意绿色底的字和黄色底的字。绿色底是FixedWindowsRollingPolicy的配置内容,黄色的是 SizeBasedTriggeringPolicy内容。当SizeBasedTriggeringPolicy触发时(即文件大小达到5MB),则启 动FixedWindowsRollingPolicy对日志文件进行滚动。MinIndex和MaxIndex分别表示最小计数和最大计数。 MaxFileSize则表示日志文件达到多少的时候进行滚动。
然后看看触发器策略类的定义,触发器必须实现 TriggeringPolicy接口,本身只有一个方法public boolean isTriggeringEvent(final File activeFile, final Object event);但 TriggeringPolicy继承的LifeCycle接口需要实现一些其他的接口,所以我们一般可以直接继承于logback本身提供的一个抽象类 TriggeringPolicyBase,这样就只需要关注实现上面那个isTriggeringEvent方法了,呵呵。于是自己实现的类框架代码如 下:
public boolean isTriggeringEvent(File file, E whatever) {// TODOreturn false;
}
由于我只是希望每次应用程序启动时就 生成一次日志文件,所以只需要一个标识来确定现在是不是程序刚执行即可,实现如下:
public class EverytimeTriggeringPolicy<E>  extends TriggeringPolicyBase<E> {private static boolean triggeringFlag = true;    //静态全局标识,初始为truepublic boolean isTriggeringEvent(File file, E whatever) {//如果标识不为true,则不触发文件滚动if (triggeringFlag == false)
return false;
//如果标识为true,则将其改为false并触发文件滚动triggeringFlag = false;return true;
}
}
上面黄色的内容即是指向我的自定义日志滚动策略类以下是一个完整的例子:
1:EverytimeTriggeringPolicy.java
package com.thread;
import java.io.File;
import ch.qos.logback.core.rolling.TriggeringPolicyBase;public class EverytimeTriggeringPolicy<E>  extends TriggeringPolicyBase<E> {private static boolean triggeringFlag = true;    //静态全局标识,初始为truepublic boolean isTriggeringEvent(File file, E whatever) {//如果标识不为true,则不触发文件滚动if (triggeringFlag == false)
return false;
//如果标识为true,则将其改为false并触发文件滚动triggeringFlag = false,;return true;
}
}
2:logback.xml
<strong><?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>test.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>tests.%i.log.zip</fileNamePattern>
<minIndex>1</minIndex>
</rollingPolicy>
<triggeringPolicy class="com.thread.EverytimeTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration></strong>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值