赞
踩
本文主要内容包含:实现log4j升级至log4j2,并实现日志自动删除的操作步骤以及注意事项。
log4j存在天然缺陷:
通过调研,log4j2采用异步输出,并且能通过配置实现自动删除日志。
1.commons-logging
介绍: commons-logging是Apache内的日志接口,是通过LogFactory获取log对象,只是一个接口,具体实现依赖相关jar包。
升级方式:此种方式只需要将LogFactory的实现包改为log4j2即可(通过移除log4j包,引入log4j2包实现)。
2.slf4j(强烈推荐使用此种方式实现)
介绍: slf4j与1类似,是一个日志实现接口,具体实现依赖相关jar包。通过LoggerFactory获取log对象。可以使用{}占位符来代替字符串拼接。
升级方式:此种方式只需要将LoggerFactory的实现包改为log4j2即可(通过移除log4j包,引入log4j2包实现)。
3.Logger对象
介绍:直接使用log4j提供的Logger对象。
升级方式:
不更改代码:引入桥接包log4j-1.2-api。最好清除所有log4j包,若不能则需要保证将桥接包放在所有log4j包的前面,否则会被log4j包覆盖,不能实现桥接功能
更改代码:使用slf4j的LoggerFactory获取log对象。
<!-- log4j和log4j2的连接包 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.7</version>
</dependency>
<!-- log4j2相关包(scf依赖中以及引入,不过为了版本控制以及防止包冲突,建议在此引入) -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-jcl</artifactId>
<version>2.7</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.7</version>
</dependency>
<!-- scf依赖升级 -->
<dependency>
<groupId>com.bj58.spat</groupId>
<artifactId>com.bj58.spat.scf</artifactId>
<version>4.2.21</version>
<type>pom</type>
</dependency>
3.更改配置文件。log4j.propertites–>>log4j2.xml文件(此处可实现定时删除,需要log4j2版本2.5以上)
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="myConsole" target="SYSTEM_OUT">
<ThresholdFilter level="info" onMatch="ACCEPT"/>
<PatternLayout pattern="[%d{MM-dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n"/>
</Console>
<RollingFile name="activexAppender" fileName="../log/vip_scf_vipidentity/vip_vipidentity.log"
filePattern="../log/vip_scf_vipidentity/vip_vipidentity.log.%d{yyyy-MM-dd}.log">
<ThresholdFilter level="info" onMatch="ACCEPT"/>
<PatternLayout>
<Pattern>[%d{MM-dd HH:mm:ss SSS} %-5level] [%t] %c{3}.%M - %m%n%ex</Pattern>
</PatternLayout>
<Policies>
<!-- 每天滚存日志 -->
<TimeBasedTriggeringPolicy modulate="true" interval="1"/>
</Policies>
<DefaultRolloverStrategy>
<Delete basePath="../log" maxDepth="1">
<IfFileName glob="vip_vipidentity*.log" />
<!-- 日志保存时间 -->
<IfLastModified age="5d" />
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="myConsole"/>
<AppenderRef ref="activexAppender"/>
</Root>
</Loggers>
</Configuration>
TimeBasedTriggeringPolicy标签中的modulate表示生产日志,interval表示生产日志的时间,单位是日志格式filePattern的最后一位。如:此处的日志格式是 filePattern=”../log/vip_scf_vipidentity/vip_vipidentity.log.%d{yyyy-MM-dd}.log”,interval是1,则代表每天生成一份日志。
DefaultRolloverStrategy标签配置日志文件的生存时间,IfFileName使用正则表达式匹配需要删除的日志的格式,IfLastModified表示日志的有效期,单位有s、m、h、d,此处配合上文,表示保存5天的日志。
log4j:WARN No appenders could be found for logger (com.bj58.testLog4j.TestLog4j).
log4j:WARN Please initialize the log4j system properly.
ERROR DefaultRolloverStrategy contains an invalid element or attribute "Delete"
private static Logger log = LoggerFactory.getLogger(RedisClientPool.class);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。