问题描述
原项目使用log4j管理日志,现在升级为log4j2后无法自动输出异常信息到日志文件内。
问题出现的环境背景及自己尝试过哪些方法
现在可以手动捕获异常然后通过logger.error(“”, e);打印异常信息到控制台和日志文件,但是项目太大全部修改花费时间太多了,想实现像log4j一样自动捕获后输出到日志文件内。
相关代码
log4j2配置文件
%d{yyyy-MM-dd HH:mm:ss,SSS} (%F:%L) %5p %m%n
D:/Tomcat 6.0/log4j/equipmentLease/
${filePath}/debug.log
${filePath}/info.log
${filePath}/error.log
filePattern="${filePath}/%d{yyyy-MM-dd}/debug_%i.log">
filePattern="${filePath}/%d{yyyy-MM-dd}/info_%i.log">
filePattern="${filePath}/%d{yyyy-MM-dd}/error_%i.log">
回答
居然被邀请了。
只不过这个问题不是很懂额。难道还有不调用log方法就能打日志的方法吗?Log4j还有自动捕获异常功能吗,可否贴个文档地址看一下(真心求教)。
你的需求我目前能想到的就是,就是通过Spring AOP的方式实现,在afterThrowing()方法中,将异常捕获打印,并将切面的作用域加入到我们想要处理的包或类中,问题就解决了,当然只处理作用域未处理的异常,作用域处理的异常还需要你手动添加log.info打印。
也不知道有没有答到点子上。。。
@AfterThrowing(value = "", throwing = "e")
public void afterThrowing(Throwable e) {
logger.error("发现未知异常", e);
}