Java 如何进行结构化日志记录?
是否有任何日志库允许对象的结构化日志记录,我的意思是,输出是结构化的,比如JSON或XML 在应用程序级别,我希望使用简洁的语法(日志记录往往会隐藏应用程序代码),例如Java 如何进行结构化日志记录?,java,logging,logback,slf4j,Java,Logging,Logback,Slf4j,是否有任何日志库允许对象的结构化日志记录,我的意思是,输出是结构化的,比如JSON或XML 在应用程序级别,我希望使用简洁的语法(日志记录往往会隐藏应用程序代码),例如 logger.info(“删除用户”,用户) logger.info(部分(“删除用户”,用户),部分(“帐户”,帐户),部分(“其他东西”,某些值)) 在日志文件级别,我得到结构良好的JSON(etc),元数据(线程、MDC、时间、级别等)作为信封,我自己的消息作为其中的结构化JSON对象,例如 "log" : { "ti
logger.info(“删除用户”,用户)
logger.info(部分(“删除用户”,用户),部分(“帐户”,帐户),部分(“其他东西”,某些值))代码>
"log" : {
"time": <timestamp>,
"level": "INFO",
"thread": <thread-name>,
"MDC": [MDC info added by application code],
etc...
"message": {
"Message": "Deleting User",
"User": <JSON object of the user serialised>
}
}
有什么想法吗?您可以使用JSONObject.toString()方法在logcat上漂亮地打印JSON
Log.d("tag", jsonObject.toString(4));
您可以使用JSONObject.toString()方法在logcat上漂亮地打印JSON
Log.d("tag", jsonObject.toString(4));
这就是空间解决的问题。Java中的实现如下所示:
Log.information("Deleting {@user}", user);
其中,@
表示应将用户
属性作为结构化数据序列化到事件中
即使没有序列化,消息模板也会生成具有一流语义属性的日志。例如,事件:
Log.information("Dividing {a} by {b}", 1, 0);
将生成一个事件,消息1除以0,属性为
a=1
和b=0
这是解决的问题空间。Java中的实现如下所示:
Log.information("Deleting {@user}", user);
其中,@
表示应将用户
属性作为结构化数据序列化到事件中
即使没有序列化,消息模板也会生成具有一流语义属性的日志。例如,事件:
Log.information("Dividing {a} by {b}", 1, 0);
将生成一个事件,消息1除以0,属性
a=1
和b=0
尝试@DavidKerr您希望json字符串的结构与您的大厦一样?@MayankPandya这是一个开始,但它只将元数据放入json,而不会将我的对象结构化为json(我的示例json的“消息”部分)@DavidKerr你找到一个满意的选择了吗?干杯试试@DavidKerr你想把json字符串的结构和你的大厦一样吗?@MayankPandya这是一个开始,但它只把元数据转换成json,它不会把我的对象转换成json(我的样本json中的“消息”部分)。@DavidKerr你找到一个满意的选项了吗?干杯但我的对象只是一个普通的域对象POJO。默认情况下,他们的日志代码将只调用“toString”,但如果域对象实现(例如)“Loggable”,则其上的方法可以将域对象转换为JSON,但我的对象只是一个普通的域对象POJO。默认情况下,他们的日志代码将只调用“toString”,但如果域对象实现(例如)“Loggable”,则其上的方法可以将域对象转换为JSON