jar包下载https://mvnrepository.com/artifact/ch.qos.logback/logback-core/1.2.3
项目上需要独立于之前的日志体系单独打印一些特殊日志,由于之前的日志方法已经封装的很好了,而且还重写了appender和filter,本人胆小不敢随便将包logback-core-1.1.3.jar
升级为现在最新的logback-core-1.2.3.jar
,也就用不了网上普遍提到的SizeAndTimeBasedRollingPolicy。只能自己慢慢测试,终于能正常打出日志,所以在此总结一下
使用logback需要先创建logback.xml文件,在其中添加配置代码,如下
<appender name="vendorAuthJobLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>log/vendorAuthJob.log</File>
<append>true</append>
<!--过滤器,只打INFO级别的日志-->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>10MB</maxFileSize>
</triggeringPolicy>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>log/vendorAuthJob-%i.log</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>10</maxIndex>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="vendorAuthJober" additivity="false" level="WARN">
<appender-ref ref="vendorAuthJobLog"/>
</logger>
<logger>
标签
- name属性即logger的名称
- additivity属性指是否将这个logger的日志流反馈到root中,如果设置为true可能出现大量重复打印的现象。
- level属性指要输出的日志等级,低于该等级的日志不会被输出。
- <appender-ref ref=“vendorAuthJobLog”>即指该logger绑定的appender。
<appender>
标签
- flie属性即要生成的路径与日志名,没有的文件夹会自动生成。
- append属性指如果有同名日志文件是否在该文件末尾继续添加。
- filter属性,能过滤一些不想要的日志文件,比如这里设置成了INFO,就只会输出INFO级别的日志。注意这里说的是只有INFO级别,连高于INFO级别的WARN和ERROR也不会输出。之前提到我们下面配置的输出等级为WARN,只输出WARN及ERROR的日志,也就是说如果按照这个配置,就什么日志也打不出来了,所以配置时一定要注意好。
- triggeringPolicy属性设置为SizeBasedTriggeringPolicy,就是说要按照日志大小生成新日志,下面maxFileSize配置为10MB,等日志文件大小到达10MB后会自动生成新的日志。
- rollingPolicy属性设置为FixedWindowRollingPolicy,它能始终保证日志按时间顺序排序。maxIndex设置为10,最多会有10个日志文件。fileNamePattern决定这些文件的名称。
- encoder属性决定日志文件的一些编码格式。
如果你想按时间保留日志文件,可以使用TimeBasedRollingPolicy,它同时继承了RollingPolicy
和 TriggeringPolicy
两个接口配置如下
<appender name="conctrlConfigJobLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>log/conctrlConfigJob.log</File>
<append>true</append>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>log/conctrlConfigJob.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history capped at 3GB total size -->
<maxHistory>30</maxHistory>
<totalSizeCap>250MB</totalSizeCap>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<logger name="conctrlConfigJober" additivity="false" level="INFO">
<appender-ref ref="conctrlConfigJobLog"/>
</logger>
TimeBasedRollingPolicy根据fileNamePattern的配置方式,决定按多久为周期生成新日志,比如我们设置为%d{yyyy-MM-dd}
,就会每日0点生成新的日志。maxHistory决定最多的日志数为30,也就是会将日志保存30天,超时就会删除。totalSizeCap属性控制最大的日志文件总量,超过该大小后也将删除日志文件。
TimeBasedRollingPolicy虽然可以同时控制日志的时间和大小,但是没有maxFileSize属性,也就是说不能控制单个文件的大小。好在新的jar包中提供了SizeAndTimeBasedRollingPolicy方法,可以实现对文件总量和单个文件大小的多重控制。
代码中调用时直接按名称调用即可,不用过多赘述,如下
Logger log = LoggerFactory.getLogger("vendorAuthJober");
Logger log2 = LoggerFactory.getLogger("conctrlConfigJober");
如果想更灵活的打印日志文件,可以自己定义appender和filter方法。具体怎么弄,我暂时还没弄明白,敬请不要期待