java - 使用 log4j JsonLayout 记录 JSON 对象

标签 java json logging log4j slf4j

嘿,我有一个使用 log4j 和 slf4j 进行日志记录的项目。
我将日志的布局配置为JsonLayout。
是否可以在保持 json 格式的同时记录 JSON 对象。

例如 :

    JsonObject object = new JsonObject();
    object.addProperty("ID", 3);
    LOGGER.info("{}", object);

将输出:
{
  "timeMillis" : 1496579005079,
  "thread" : "main",
  "level" : "INFO",
  "loggerName" : "Logger",
  **"message" : "{\"ID\":3}",**
  "endOfBatch" : false,
  "loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
  "threadId" : 1,
  "threadPriority" : 5
}

虽然我需要它来输出这个:
{
  "timeMillis" : 1496579005079,
  "thread" : "main",
  "level" : "INFO",
  "loggerName" : "Logger",
  **"message" : {"ID":3},**
  "endOfBatch" : false,
  "loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
  "threadId" : 1,
  "threadPriority" : 5
}

最佳答案

有一个 objectMessageAsJsonObject 应该为您执行此操作。
在您的 log4j2.xml 中:

 <RollingFile name="json-log" fileName="build/log"
      filePattern="/var/log/.%d{yyyy-MM-dd}.log">
      <JSONLayout objectMessageAsJsonObject="true"/>    
 </RollingFile>

关于java - 使用 log4j JsonLayout 记录 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44354646/

相关文章:

java - Python 与 Java 中模数实现的区别

Java:递归地找出一个数字是否为质数

java - 当其他线程进入休眠状态时,主线程不应该开始执行吗

python - 如何使用 GraphQL 模式进行类似 JSON 模式的数据验证?

apache - 为什么 Apache Web 服务器访问日志的格式不正确?

java - Spring + hibernate : manually commit the transaction at end

ios - 为什么我可能会在此 http POST 请求上收到内部服务器错误 (500)

javascript - 如何在angularJS中解析Json字符串?

logging - 审计/日志数据库有哪些好的 NoSQL 和非关系型数据库解决方案

Django 日志记录 - 未找到处理程序的日志文件