Log4j2日志回滚设置—之二

一.说明
本例子要求使用jar为2.7以上使用的jar为:log4j-core-2.7.jar,log4j-api-2.7.jar。

二.XML关键标签

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info">
<Properties>
	<!--注意根目录写法:若/logs则日志写到项目所在磁盘的位置,若logs则是项目运行时的 目录下 -->
	<Property name="logPath">logs</Property>
	<Property name="info">${logPath}/info</Property>
</Properties>
<appenders>
	<!--这个输出控制台的配置 -->
	<Console name="Console" target="SYSTEM_OUT">
		<ThresholdFilter level="trace" onMatch="ACCEPT"
			onMismatch="DENY" />
		<PatternLayout pattern="%d %p [%c{1}:%L] %m%n" />
	</Console>
	<RollingFile name="infoLog" fileName="${info}/info.log"
		filePattern="${info}/info-%d{yyyy-MM-dd-HH-mm}-%i.log.gz">
		<Filters>
			<ThresholdFilter level="info" onMatch="ACCEPT"
				onMismatch="DENY" />
			<ThresholdFilter level="error" onMatch="DENY"
				onMismatch="NEUTRAL" />
		</Filters>
		<PatternLayout pattern="%d %p [%c{1}:%L] %m%n" />
		<Policies>
			<SizeBasedTriggeringPolicy size="20KB" />
		</Policies>
		<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
		<DefaultRolloverStrategy max="4">
			<Delete basePath="${info}/" maxDepth="1">
				<IfFileName glob="*info-*.log.gz" />
				<IfLastModified age="20m"/>
			</Delete>
		</DefaultRolloverStrategy>
	</RollingFile>
</appenders>
<loggers>
	<!--建立一个默认的root的logger -->
	<root level="info">
		<appender-ref ref="infoLog" />
		<appender-ref ref="Console" />
	</root>
</loggers>
</configuration>
  1. SizeBasedTriggeringPolicy
    触发压缩的标签,达到20KB触发压缩
  2. DefaultRolloverStrategy
    filePattern="${info}/info-%d{yyyy-MM-dd-HH-mm}-%i.log.gz
    控制满足条件的个数(%i),如xml中设置为4,即info-2018-11-21-15-53中53min时最多有4个文件,之后就在这四个文件中进行回滚覆盖。
  3. Delete
    这个标签是jar2.5之后才支持,可以设置保留多少天内的日志
    如:Xml中保留20min种之内的文件,之后进行回滚覆盖。
    其中的age后的单位要与filePattern="${info}/info-%d{yyyy-MM-dd-HH-mm}-%i.log.gz中的%d{yyyy-MM-dd-HH-mm}最后一位保持一致。例如打算保留10天的日志,需要设置%d{yyyy-MM-dd} ,age=10d。

三.案例

  1. 保留10天内的日志,每天内的日志不回滚,单个日志达到100M压缩

    <RollingFile name="infoLog" fileName="${info}/info.log"
    	filePattern="${info}/info-%d{yyyy-MM-dd}-%i.log.gz">
    <Filters>
    	<ThresholdFilter level="info" onMatch="ACCEPT"
    		onMismatch="DENY" />
    	<ThresholdFilter level="error" onMatch="DENY"
    		onMismatch="NEUTRAL" />
    </Filters>
    <PatternLayout pattern="%d %p [%c{1}:%L] %m%n" />
    <Policies>
    	<SizeBasedTriggeringPolicy size="20KB" />
    </Policies>
    <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
    <DefaultRolloverStrategy max="4">
    	<Delete basePath="${info}/" maxDepth="1">
    		<IfFileName glob="*info-*.log.gz" />
    		<IfLastModified age="10d>
    	</Delete>
    </DefaultRolloverStrategy>
    
    分析:由于当天的不回滚,故DefaultRolloverStrategy 中max尽可能设置大一点,filePattern="${info}/info-%d{yyyy-MM-dd}-%i.log.gz"中精确到天,单位为d。
  2. 每天只生成一个文件,保留10天日志

    <RollingFile name="infoLog" fileName="${info}/info.log"
    	filePattern="${info}/info-%d{yyyy-MM-dd}-%i.log.gz">
    	<Filters>
    		<ThresholdFilter level="info" onMatch="ACCEPT"
    		onMismatch="DENY" />
    	</Filters>
    <PatternLayout pattern="%d %p [%c{1}:%L] %m%n" />
    <Policies>
    	<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    </Policies>
    <DefaultRolloverStrategy max="4">
    	<Delete basePath="${info}/" maxDepth="1">
    		<IfFileName glob="*info-*.log.gz" />
    		<IfLastModified age="10d>
    	</Delete>
    </DefaultRolloverStrategy>
    

    分析:
    有的日志量不是很大,可以写入到一个文件中,需要使用标签

    		<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
    interval控制周期。
    

四、总结:
有了上面几个标签,就可以灵活控制保留日志的策略,正常的组合还有:按每个文件的大小、数量、日期组合等等,这些一般能满足我们正常的日志回滚策略。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值