摸索过程
查看官方文档https://logging.apache.org/log4j/2.0/manual/appenders.html#RewriteAppender,官方文档中虽然有所介绍,但是没给demo,百度谷歌都很难查到此类文章,所有配置起来有一定难度。
pom.xml的配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
log4j2.xml的配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
其中MyRewritePolicy是我自定义的,它实现了RewritePolicy接口,同时需要实现一个方法public LogEvent rewrite(final LogEvent event)
MyRewritePolicy.java的实现
1 | package com.kangyonggan.demo; |
小测一下
1 | package com.kangyonggan.demo; |
运行后报错:
1 | 2017-04-24 23:35:04,827 main ERROR Unable to invoke factory method in class class com.kangyonggan.demo.MyRewritePolicy for element MyRewritePolicy. java.lang.IllegalStateException: No factory method found for class com.kangyonggan.demo.MyRewritePolicy |
从报错信息中可以看出:没有工厂方法(No factory method found)。
还提到了org.apache.logging.log4j.core.config.plugins这个包下面的插件。
所以去这个包下面看一下相关的插件:
果然看到了factory相关的plugin,并且PluginFactory是作用在method上的。
使用@PluginFactory注解
1 | package com.kangyonggan.demo; |
这次运行后没有报错了,也打印了“factory”,但是rewrite方法没被执行。
仔细一想,这既然是工厂方法,一定是为了创建对象的,所以再次修改如下。
PluginFactory返回自定义的实例
1 | package com.kangyonggan.demo; |
在此运行后发现成功了!
完整log4j2.xml的配置
1 | <?xml version="1.0" encoding="UTF-8"?> |
用以上配置就已经可以解决我们项目中的所有需求了,不对,还漏了一个,就是普通日志只打印info级别的,sql需要打印debug级别的。
打印debug级别的SQL
请参考我的另一篇文章使用Log4j2让项目输出info级别的日志和debug级别的sql
觉得不错就赏点吧,你的支持是我进步的动力!