0
点赞
收藏
分享

微信扫一扫

log4j2扩展——打印自定义日志输出格式,将日志输出为json或自定义


文章目录

  • 写在前面
  • 1、自定义LayOut
  • 2、log4j2.xml的配置
  • 3、测试一下吧

写在前面

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;
    }

    /**
     * 插件的创建工厂
     */
    @PluginFactory
    public 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等等任意我们想要的格式
     */
    @Override
    public 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信息


举报

相关推荐

0 条评论