以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
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以使用Fastjson自带的SerializerFeature.PrettyFormat来实现格式化输出。示例代码如下: ``` java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; public class Test { public static void main(String[] args) { String jsonString = "{\"name\":\"Tom\",\"age\":20,\"gender\":\"male\"}"; // 格式化输出 String prettyJsonString = JSON.toJSONString(JSON.parseObject(jsonString), SerializerFeature.PrettyFormat); System.out.println(prettyJsonString); } } ``` 输出结果: ``` { "age": 20, "gender": "male", "name": "Tom" } ``` ### 回答2: Fastjson是一种用于处理JSON数据的Java库。它提供了多种功能,其中之一是将JSON格式化输出打印。下面是使用Fastjson格式化输出打印的示例: ```java import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; public class FastjsonExample { public static void main(String[] args) { // 创建一个JSON对象 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "John"); jsonObject.put("age", 25); jsonObject.put("gender", "male"); // 使用Fastjson进行格式化输出打印 String formattedOutput = JSON.toJSONString(jsonObject, true); System.out.println(formattedOutput); } } ``` 上述代码中,首先创建了一个JSON对象`jsonObject`,其中包含了`name`、`age`和`gender`三个属性。然后使用`JSON.toJSONString()`方法将`jsonObject`格式化为字符串形式,并传入第二个参数`true`表示进行格式化。最后通过`System.out.println()`方法输出格式化后的字符串。 运行上述代码,将得到以下输出结果: ``` { "age": 25, "gender": "male", "name": "John" } ``` 可以看到,JSON对象被格式化输出,并使用了缩进和换行符,以使其更易读。 需要注意的是,Fastjson还提供了很多其他功能,如将Java对象转换为JSON字符串、将JSON字符串解析为Java对象等。以上仅是有关Fastjson格式化输出打印的简单示例。 ### 回答3: fastjson2是一个高效的Java JSON处理库,用于解析和生成JSON数据。它可以将Java对象转换为JSON字符串,也可以将JSON字符串转换为Java对象。在使用fastjson2库时,我们可以使用格式化输出来打印JSON数据。 格式化输出功能可以使得JSON数据更加易读和美观。通过设置相应的格式化参数,我们可以将JSON数据按照一定的缩进和换行规则进行输出。这样,在开发和调试过程中,我们可以更清晰地查看JSON数据的结构和内容。 我们可以通过以下步骤来实现fastjson2的格式化输出打印: 1. 导入fastjson2库的相关依赖。可以在项目的pom.xml文件中添加fastjson2的依赖项,或者手动将fastjson2的jar包添加到项目的类路径中。 2. 创建一个Java对象,并将其转换为JSON字符串。可以使用fastjson2提供的JSONObject或者JSONArray类来创建JSON对象或者数组。 3. 使用JSON.toJSONString方法将Java对象转换为格式化后的JSON字符串。在该方法中,我们可以通过设置SerializerFeature.PrettyFormat参数来开启格式化输出功能。 4. 打印格式化后的JSON字符串。可以使用System.out.println或者其他打印方法将格式化后的JSON字符串输出到控制台或者日志文件中。 以下是一个示例代码片段,展示了如何使用fastjson2进行格式化输出打印: ``` import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.serializer.SerializerFeature; public class FastJsonDemo { public static void main(String[] args) { // 创建一个JSON对象 JSONObject jsonObject = new JSONObject(); jsonObject.put("name", "张三"); jsonObject.put("age", 20); // 将JSON对象转换为格式化后的JSON字符串 String jsonString = JSON.toJSONString(jsonObject, SerializerFeature.PrettyFormat); // 打印格式化后的JSON字符串 System.out.println(jsonString); } } ``` 运行上述代码,输出的JSON字符串会按照一定的缩进和换行规则进行格式化,以便于阅读和理解。 总之,通过使用fastjson2库的格式化输出功能,可以使得JSON数据更加易读和美观,方便开发和调试工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值