我想为日志语句添加一个唯一标识符,这样我就可以为每个日志语句添加文档(外部,例如 wiki),这样用户就可以使用该 ID 快速访问与消息相关的文档。我想使用的日志记录框架是 SLF4J/logback。
除了与审计框架有关的一些内容外,我无法找到有关相关方法的文档。
有一个标记概念,我认为它可用于 ID 注入(inject),或者我可以将 ID 添加到消息文本本身。
如何“以正确的方式”将 ID 添加到日志记录语句?有没有我没有想到的可能性?
编辑
术语唯一 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 取决于日志系统/它的配置。
请您参考如下方法:
Slf4j 有 http://www.slf4j.org/apidocs/org/slf4j/Marker.html
不幸的是,Marker
被宣传用于不同的目的。您仍然可以使用它们来唯一标记日志记录语句。
比较麻烦的方案是MDC:
MDC.put("MsgId", "EV-1234");
log.info()
MDC.remove("MsgId");
或使用结构日志记录(需要 v2.0.0):
logger.atDebug()
.addKeyValue("MsgId", "EV-1234")
.log("Temperature changed.");