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

标签 java logging slf4j

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

关于java - 使用 SLF4J 时日志消息的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20006577/

相关文章:

java - 日志记录框架注意事项

java - 带有 slf4j 和 log4j 的 hibernate 3.4

java - 如何使用 objectmapper 将 JSON 反序列化为输入 bean?

java - 是否使用 Jersey 版本 1.x 或 2.0

java - 降低时间复杂度

javascript - 输出日志到/var/log/syslog

Java 控制台在发生日志记录时推送输入文本

jakarta-ee - 带有 glassfish 的 slf4j 忽略了 logback

java - 在 Spring 上下文加载之前避免 Log4j 警告

java - JPA/MySql 具有递增主次id的eniity