目标:实现基于行和时间间隔的文件滚动。
注:不是纯粹的行,而是log的次数,如果log一次是一行,就是行数(我log一次就是一行)。
例如:单个文件超过10行滚动文件,如果超过10秒还不到10行,也滚动文件。
mysql默认的组合策略达不到这个目标,他是两种策略的“或”,单一的行数到达限制,或者单一的时间间隔到达限制,都会滚动。在滚动后,两个策略单独重置,而不是一起都重置。
实现方法:
通过实现一个TriggeringPlolicy即可达到这个目标。这个接口的isTriggeringEvent方法来控制滚动,如果该方法返回true,那么就滚动。
这里实现了一个LineBasedTriggeringPolicy ,需要实现TriggeringPlolicy,和一个工厂方法。该类和工厂方法都需要用Annotation标注。
上层对isTriggeringEvent的调用时同步的,我们这里不需额外的同步。