【发布时间】:2013-11-15 17:02:31
【问题描述】:
我想为日志语句添加一个唯一标识符,这样我就可以为每个日志语句添加文档(外部,例如 wiki),以便用户可以使用该 ID 快速访问与消息相关的文档。我想使用的日志框架是 SLF4J/logback。
除了一些关于审计框架的信息外,我找不到有关相关方法的文档。
我认为标记概念可用于 ID 注入,或者我可以将 ID 添加到消息文本本身。
如何以“正确的方式”将 ID 添加到日志记录语句中?有没有我没有想到的可能性?
编辑
unique ID 一词只是指出 应该 是每个日志语句的标识符。开发人员,例如手动将这样的 ID 添加到表/枚举/任何内容中,这可能是错误的。 这样的 ID 必须是稳定的,所以文档可以基于它。所以 ID 本身并不是我想知道的。
我的问题是:将 ID 与消息文本一起推送到记录器的正确方法是什么?标记是否适合这种要求,我应该将 ID 嵌入到消息文本中还是有其他可能性?
所以,基本上,我会使用
logger.info(IDMarkers.DB_CONNECTION_FAILED, "no connection to the database");
或者只是
logger.info("[{}] no connection to the database", LogIDs.DB_CONNECTION_FAILED);
第一种方法的优点是显示 ID 取决于日志记录系统/它的配置。
【问题讨论】:
-
您希望 id 如何唯一?通过电话?通过线程?按代码行?
-
@zenbeni:日志语句(例如
logger.debug('some message text'))应该获取 ID。这样的声明会产生例如每次通话都有一个类似[ID1234] some message text的日志条目。 -
在运行时获取执行上下文很昂贵:stackoverflow.com/questions/17473148/… 所以我认为你应该在消息中静态地进行。
-
@zenbeni:我可能错了,但获取标记并不比从其他地方获取 ID 所需的字符串连接更昂贵。这不会涉及获取执行上下文。
-
在更多谷歌搜索后发现this有关SO的相关问题,不幸的是没有太多信息。