自定义日志输出格式,将日志输出为json或自定义"/>
log4j2扩展——打印自定义日志输出格式,将日志输出为json或自定义
文章目录
- 系列文章目录
- 写在前面
- 1、自定义LayOut
- 2、log4j2.xml的配置
- 3、测试一下吧
系列文章目录
学习Java日志框架之——搞懂JUL(java.util.logging)
学习Java日志框架之——搞懂log4j
学习Java日志框架之——搞懂日志门面(JCL+SLF4J)
学习日志框架之——搞懂logback
学习日志框架之——log4j2入门
log4j2扩展——打印自定义日志输出格式,将日志输出为json或自定义
写在前面
log4j2是当前最为主流的java日志框架,其性能及可扩展性要优于其他任意一款日志框架。
当我们想将日志输出为json,或者是其他我们想要的格式需要怎么处理呢?
log4j2入门请移步:学习日志框架之——log4j2入门
1、自定义LayOut
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.Layout;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.Node;
import org.apache.logging.log4j.core.config.plugins.Plugin;
import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.apache.logging.log4j.core.config.plugins.PluginFactory;
import org.apache.logging.log4j.core.layout.AbstractStringLayout;
import org.apache.logging.log4j.message.Message;import java.nio.charset.Charset;/*** log4j2扩展:自定义json格式输出的日志*/// 声明插件
@Plugin(name = "MyLayout", category = Node.CATEGORY, elementType = Layout.ELEMENT_TYPE, printObject = true)
public class MyLayout extends AbstractStringLayout {protected MyLayout(Charset charset, String attr1, String attr2) {super(charset);this.attr1 = attr1;this.attr2 = attr2;}/*** 插件的创建工厂*/@PluginFactorypublic static MyLayout createLayout(@PluginAttribute(value = "charset", defaultString = "UTF-8") final Charset charset,@PluginAttribute(value = "attr1", defaultString = "") final String attr1,@PluginAttribute(value = "attr2", defaultString = "") final String attr2) {return new MyLayout(charset, attr1, attr2);}private final String attr1;private final String attr2;/*** 自定义日志输出格式* 该返回值就是我们所见到的日志输出格式,我们可以自定义为json、xml等等任意我们想要的格式*/@Overridepublic String toSerializable(LogEvent event) {Level level = event.getLevel();Message message = event.getMessage();long threadId = event.getThreadId();// ... event中包含着日志所有的信息return "attr1:" + attr1 + ";attr2:" + attr2 + ";level:" + level.name() + ";" + ";thread:" + threadId + " -- " + message.getFormattedMessage() + "\n" ;}}
2、log4j2.xml的配置
只需要将插件引入即可,使用非常方便!
<!-- 配置控制台输出 -->
<Console name="consoleAppender" target="SYSTEM_OUT"><MyLayout charset="UTF-8" attr1="aaa" attr2="bbb" />
</Console>
3、测试一下吧
logger.info("info信息");
输出结果:
attr1:aaa;attr2:bbb;level:INFO;;thread:1 – info信息
更多推荐
log4j2扩展——打印自定义日志输出格式,将日志输出为json或自定义
发布评论