是否有任何日志库允许对象的结构化日志记录,我的意思是,输出是结构化的形式,如JSON或XML?
在应用程序级别,我想使用简洁的语法(日志记录往往隐藏应用程序代码),例如
logger.info("Deleting user", user)
logger.info(part("Deleting user", user), part("Account", account), part("Something else", someValue));
在日志文件级别,我得到结构良好的JSON(等),元数据(线程,MDC,时间,级别等)作为信封,我自己的消息作为结构化JSON对象,例如
"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>
}
}
当然,它不需要在日志文件中打印得很漂亮。
如果域对象(例如用户)可以实现具有为不同日志级别序列化状态的方法的Loggable
接口,那将是很酷的,例如,
*然后,某些日志聚合器可以理解语义级别的日志。日志格式一致,允许搜索等*
过去,我已经实现了一些让我参与其中的功能,以确保键/值对的格式化,但这并没有给我我想要的一切。这工作,规范化键/值,格式化值,突出显示空值等,但它不会发出JSON,也不能委托对象格式: -
logger.info(logString(part("Deleting user", user), part("Account", account), part("Something else", someValue)));
有什么想法吗?
答案 0 :(得分:0)
您可以使用JSONObject.toString()方法在logcat上打印JSON。
Log.d("tag", jsonObject.toString(4));
答案 1 :(得分:0)
这是message templates解决的问题空间。 Java中的serilogj实现如下所示:
Log.information("Deleting {@user}", user);
其中@
表示user
属性应作为结构化数据序列化到事件中。
即使没有序列化,消息模板也会生成具有一流语义属性的日志。例如,事件:
Log.information("Dividing {a} by {b}", 1, 0);
将生成一条消息除以1 和属性a = 1
和b = 0
的事件。