IT序号网

java之使用 SLF4J 时日志消息的 ID

rubylouvre 2023年09月15日 程序员 11 0

我想为日志语句添加一个唯一标识符,这样我就可以为每个日志语句添加文档(外部,例如 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.");           


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!