2019独角兽企业重金招聘Python工程师标准>>>

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

<?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>


转载于:https://my.oschina.net/jielucky/blog/156953

自定义logback触发器策略进行日志滚动相关推荐

  1. spring boot—自定义logback日志配置

    自定义日志配置 spring boot2.2.4官方文档 logback中文文档    1)spring boot可以适应所有日志框架,只需在类路径下包含相应的依赖来激活各种日志系统.    2)sp ...

  2. Log4j2日志滚动策略TimeBasedTriggeringPolicy的魔鬼槽点

    TimeBasedTriggeringPolicy参数说明: 参数名称 类型 描述 interval integer 根据日期格式中最具体的时间单位来决定应该多久发生一次rollover.例如,在日期 ...

  3. springboot 曰志自定义logback配置

    常用logback-spring.xml 配置 根节点<configuration> 包含两个属性,三个子节点 contextName 用于区分不同的应用名称 property 用于定义该 ...

  4. Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)

    文章目录 Pre 需求 工程 Code 继承AbstractLoadBalancerRule实现自定义Rule 随机权重策略 配置 验证 源码 Pre Spring Cloud Alibaba - 0 ...

  5. logback出现大量XXX_IS_UNDEFINED日志文件的问题

    前言 在spring boot中采用logback将日志打印到文件时,你是否遇到过文件名为XXX_IS_UNDEFINED的情况,今天带大家一块分析解决这个问题. 一.logback中spring属性 ...

  6. linux log rotation日志滚动详解

    文章目录 1. 为什么需要滚动日志 2. 日志滚动过程 3. 日志滚动背景介绍 4. 日志滚动工具logrotate 4.1 logrotate配置文件位置 4.2 定时轮循机制 4.3 值得注意的一 ...

  7. Logback+ELK+SpringBoot搭建日志收集服务器

    前言 本文重点介绍Logback和ELK和SpringBoot是怎么整合收集日志的 关于ELK的说明和安装可以点击查看ELK(Elasticsearch.Logstash.Kibana)安装, htt ...

  8. logback不同业务的日志打印到不同文件

    logback不同业务的日志打印到不同文件 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/mggwct/article/details/777181 ...

  9. springboot aop + logback + 统一异常处理 打印日志

    springboot aop + logback + 统一异常处理 打印日志 参考文章: (1)springboot aop + logback + 统一异常处理 打印日志 (2)https://ww ...

最新文章

  1. debug.keystore文件不存在解决办法
  2. 收到猎头信息的一些感想
  3. 搭完环境,最后登录时提示“与数据库连接失败,请与管理员联系”
  4. nginx 转发慢_学习Nginx的正确姿势,多图详解助你更上一层楼!(干货收藏篇)...
  5. MongoDB自定义条件查询案例
  6. 201521123110《Java程序设计》第5周学习总结
  7. android10新功能,Android10(Api 29)新特性
  8. 用javascript代码拼html
  9. 越来越多优秀的老员工辞职,怎么办?
  10. 性能测试知多少---吞吐量【转】
  11. selenium python 文本框输入信息_selenium python向富文本框中输入内容
  12. python多态如何理解_大家对python中多态是如何理解的?
  13. 190804每日一句
  14. 学生社团管理系统(Java+Swing+mysql)(超简陋)
  15. 《软件工程》第5章系统建模
  16. 我的MBTI职业性格测试
  17. JavaScript打造很酷的图片放大效果实例代码
  18. Python爬取某宝菠萝数据,并可视化分析销量
  19. 2020年chx的计算机保研之路系列(3)——中科院计算所(获得offer)
  20. mysql 增删修模型_48.Python中ORM模型实现mysql数据库基本的增删改查操作

热门文章

  1. JUC——线程同步锁(ReentrantLock)
  2. 北京智能计算产业研究院成立
  3. 探究 UIViewController 生命周期
  4. 测试Hadoop2.7.1
  5. 高性能js之js文件的加载与解析
  6. Windows Phone 8初学者开发—第21部分:永久保存Wav音频文件
  7. Java Ajax: DWR
  8. jquery validate 插件:(2)简单示例
  9. ROS系统实现 tf坐标系广播与监听
  10. ROS系统 用Python或C++实现发布者Publisher