以json格式打印日志

效果

将对象参数以json字符串输出到日志中

代码:log.info(“param: {}”, obj);

结果:param: {“k1”:“v1”,“k2”:“v2”}

介绍

spring boot项目,将日志以json方式打印。我们在用logback打印日志时,如果传入的参数是个对象,但是日志输出变成:cn.com.xxx.MyBean@68fb2c38,没把对象里的属性值输出,达不到预期效果。除非我们重写对象的toString方法,或者json工具转换一下,比如gson, fastjson, jackson等等。接下来,我们将以实现ch.qos.logback.classic.pattern.MessageConverter的方式去统一json格式的日志输出。

示例

  • 实体对象
@Getter
@Setter
public class MyBean {
    
    
    private Integer a;
    private Integer b;
}
  • 转换类
@Slf4j
public class JsonMessageConverter extends MessageConverter {
    
    
    private ObjectMapper objectMapper = new ObjectMapper();
    @Override
    public String convert(ILoggingEvent event) {
    
    
        try {
    
    
            Object[] arr = Stream.of(event.getArgumentArray()).map(this::toJsonStr).toArray();
            return MessageFormatter.arrayFormat(event.getMessage(), arr).getMessage();
        } catch (Exception e) {
    
    
            return event.getMessage();
        }
    }
    private Object toJsonStr(Object obj) {
    
    
        try {
    
    
            return objectMapper.writeValueAsString(obj);
        } catch (JsonProcessingException e) {
    
    
            log.error("json转换异常", e);
        }
        return obj;
    }
}
  • logback.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <conversionRule conversionWord="m" converterClass="com.yubest.demo.JsonMessageConverter"/>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
    </root>
</configuration>
  • 使用示例
MyBean bean = new MyBean();
bean.setA(111111);
bean.setB(222222);
        
log.info("我是日志:{}", bean);
log.info("我是日志:{}", "abcdef");
log.info("我是日志:{}", 444444);
log.info("我是日志:{}", 555555.55);
log.info("我是日志:{}", true);
  • 结果展示
我是日志:{"a":111111,"b":222222}
我是日志:"abcdef"
我是日志:444444
我是日志:555555.55
我是日志:true
  • 码云 https://gitee.com/hweiyu/spring-boot-json-log

猜你喜欢

转载自blog.csdn.net/vbhfdghff/article/details/114025096