是否有任何日志记录库允许对对象进行结构化日志记录,我的意思是,输出采用结构化形式,例如JSON或XML?
在应用程序级别,我想使用简洁的语法(日志记录倾向于隐藏应用程序代码),例如logger.info("Deleting user", user)
logger.info(part("Deleting user", user), part("Account", account), part("Something else", someValue));
在日志文件级别,我得到了结构良好的JSON(etc),以元数据(线程,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>
}
}
当然,不需要在日志文件中漂亮地打印它。
如果域对象(例如User)可以实现
Loggable
接口,该接口具有用于序列化不同日志级别的状态的方法(例如,INFO级别提供了一个摘要
DEBUG级别递归提供更多,更深入的数据
*然后,某些日志聚合器可以在语义级别理解日志。日志采用统一格式,允许搜索等。*
过去,我实现了两个功能,这些功能可以使我参与其中,以确保键/值对被格式化,但这并不能满足我的所有需求。该方法可以正常化键/值,格式化值,突出显示空值等,但是它不会发出JSON并且无法委托对象格式:-
logger.info(logString(part("Deleting user", user), part("Account", account), part("Something else", someValue)));
有任何想法吗?
最佳答案
您可以使用JSONObject.toString()方法在logcat上漂亮地打印JSON。
Log.d("tag", jsonObject.toString(4));