首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行结构化日志记录?

如何进行结构化日志记录?
EN

Stack Overflow用户
提问于 2017-02-17 12:14:23
回答 2查看 2.4K关注 0票数 1

是否有允许对对象进行结构化日志记录的日志库,我的意思是,输出是以结构化的形式出现的,如JSON或XML?

在应用程序级别,我希望使用简洁的语法(日志记录往往隐藏应用程序代码),例如

  1. logger.info("Deleting user", user)
  2. logger.info(part("Deleting user", user), part("Account", account), part("Something else", someValue));

在日志文件级别,我得到了良好的结构化JSON ( etc),以元数据(线程、MDC、时间、级别等)作为信封,其中包含我自己的消息作为结构化的JSON对象。

代码语言:javascript
复制
"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接口,该接口具有序列化不同日志级别的状态的方法,这将是很酷的。

  1. 信息级别给出了一个摘要。
  2. 调试级别以递归方式提供更多、更深的数据。

*一些日志聚合器可以在语义级别上理解日志。日志是一致格式化的,允许搜索等。*

在过去,我实现了几个函数,这些函数为我提供了方法的一部分,以确保键/值对是格式化的,但这并不能给出我想要的一切。这是可行的,规范键值/值、格式化值、突出显示空值等,但它不发出JSON,也不能委托对象格式化:-

代码语言:javascript
复制
logger.info(logString(part("Deleting user", user), part("Account", account), part("Something else", someValue)));

有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2017-02-17 12:22:24

您可以使用JSONObject.toString()方法在logcat上漂亮地打印JSON。

代码语言:javascript
复制
Log.d("tag", jsonObject.toString(4));
票数 0
EN

Stack Overflow用户

发布于 2017-07-19 02:55:08

这是消息模板解决的问题空间。Java中的serilogj实现如下所示:

代码语言:javascript
复制
Log.information("Deleting {@user}", user);

其中,@指示user属性应作为结构化数据序列化到事件中。

即使没有序列化,消息模板也会生成具有一流语义属性的日志。例如,事件:

代码语言:javascript
复制
Log.information("Dividing {a} by {b}", 1, 0);

将产生一个消息为1乘0的事件,并属性为a = 1b = 0

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42297710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档