logback实践总结

logback的日志滚动策略实践总结:
1、如果日志打印的多的话,很容易占满磁盘,引起宕机。所以要配置日志滚动策略rollingPolicy,设置最大文件容量,超过最大值,再下一次产生新文件的时候,自动清空最早的文件。
2、假设某logger对应路径的日志每天有1G,可以分配给该logger的最大空间是20G,可以使用rollingPolicy的TimeBasedRollingPolicy策略,每周生成一个文件,当第3周结束,日志大小为21G,超过最大限制,会自动删除第1周的文件,再创建第4周的日志文件。如下:

	<appender name="LOGGER-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>D://export//Logs//test.com.local/info.log</file>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>D://export//Logs//test.com.local/info.log.%d{yyyy-w}</fileNamePattern>
			<maxHistory>4</maxHistory>
			<totalSizeCap>20G</totalSizeCap>
		</rollingPolicy>
		<encoder>
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] - %m%n</pattern>
		</encoder>
	</appender>

3、上面的配置有缺陷,如果第3周发生日志突增的情况,还没到第3周结束,不会自动的清理前面的日志,本周的日志持续增加会超过最大限制,或打满磁盘,引起事故。
4、如果日志量较大,或者打印日志的量不平均,可以使用rollingPolicy的FixedWindowRollingPolicy策略,存储10个(默认20个)文件,配合triggeringPolicy触发策略,设置每个文件最大的容量1G。这样,当文件达到最大容量,会自身产生一个新文件,如果文件的个数达到10个,会先删除最早的文件。这样可以控制日志的总量不超过设置的最大限制,不会引起占用磁盘过多或打满的问题。如下:

    <appender name="LOGGER-INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>D://export//Logs//test.com.local/info.log</file>

        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <fileNamePattern>D://export//Logs//test.com.local/info-%i.log</fileNamePattern>
            <minIndex>1</minIndex>
            <maxIndex>10</maxIndex>
        </rollingPolicy>

        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <maxFileSize>1G</maxFileSize>
        </triggeringPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] - %m%n</pattern>
        </encoder>
    </appender>

http://www.logback.cn/

logback新认识https://blog.csdn.net/millery22/article/details/86672284#commentBox

logback的主要组成部分

  • appender,是用来定义一个写日志记录的组件,常用的appender类有ConsoleAppender和RollingFileAppender,前者个是用来在控制台上打印日志,后者是将日志输出到文件中。
  • layout,是指定日志的布局方式,这个基本都不会去特殊的指定,可以忽略,知道有这个东西即可。
  • encoder,负责把事件转换成字节数组并把字节数组写到合适的输出流。encoder可以指定属性值class,这里对应的类只有一个PatternLayoutEncoder,也是默认值,可以不去指定。
  • filter,过滤器分为三种,logback-classic提供的是两种,分别是常规的过滤器和Turbo过滤器。常用的过滤器就是按照日志级别来控制,将不同级别的日志输出到不同文件中,便于查看日志。如:错误日志输出到xxx-error.log,info日志输出到xxx-info.log中。
  • rollingPolicy,用来设置日志的滚动策略,当达到条件后会自动将条件前的日志生成一个备份日志文件,条件后的日志输出到最新的日志文件中。常用的是按照时间来滚动(使用的类TimeBaseRollingPolicy),还有一种就是基于索引来实现(使用的类FixedWindowRollingPolicy)。
  • triggeringPolicy,日志触发器策略,常用的是日志的大小的控制,当日志达到对应的大小的时候,就会触发。生成新的日志文件。日志大小的控制配合rollingPlicy使用的时候,不同的rollingPolicy会有所不同。

root logger 的日志级别永远不会设置成一个非空的值,默认是 DEBUG。

如果默认的累积行为对你来说不适合,你可以设置 additivity = false。

在默认的情况下,appender 是可以重复使用的:logger 可以通过附加到本身的 appender 输出日志,同样的也可以附加到起祖先的身上,并输出日志。因此,如果同一个 appender 附加到多个 logger 身上,那么就导致日志重复打印。

可以通过 resource 属性来引入位于 classpath 路径下的资源文件。

打印logback内部状态信息,可以通过 StatusPrinter 类来调用 print() 方法查看。

public class DesUtils {
    private static Logger logger = LoggerFactory.getLogger(DesUtils.class);
    public static void main(String[] args) {
        LoggerContext lc = (LoggerContext)LoggerFactory.getILoggerFactory();
        StatusPrinter.print(lc);
        logger.info("DesUtils -> main, args= test.test");
    }
}
17:32:14,059 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:32:14,060 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:32:14,060 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.xml]
17:32:14,069 |-INFO in ch.qos.logback.classic.BasicConfigurator@726f3b58 - Setting up default configuration.

17:32:14.172 [main] INFO com.jd.pop.nethp.auditrx.common.utils.DesUtils - DesUtils -> main, args= test.test
17:33:52,279 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
17:33:52,280 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
17:33:52,280 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/E:/work/test/target/classes/logback.xml]
17:33:52,611 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
17:33:52,616 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
17:33:52,637 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CONSOLE]
17:33:52,671 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:33:52,806 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
17:33:52,855 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [LOGGER-ERROR]
...略...
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值