SLF4J MDC 的替代品

Posted

技术标签:

【中文标题】SLF4J MDC 的替代品【英文标题】:Alternatives to SLF4J MDC 【发布时间】:2018-04-15 16:29:10 【问题描述】:

我正在尝试在我的 JSF 应用程序中记录启动每个请求的用户名,但显然是 MDC on a web app server (thread pool) is risky。

我已经看到 MDC 在使用 EJB @Asynchronous 调用时泄漏到一个新调用中,这是我没有预料到的。

有哪些选择?我宁愿不必依赖记住将用户名放在每个日志调用上。我要包装 slf4j 吗?

【问题讨论】:

这完全没有风险——至少没有运行 Web 服务器的风险——只要做对就行。同样,很像运行 Web 服务器。 感谢@BoristheSpider 的回复,您有任何正确操作的链接吗?除了logback.qos.ch/manual/mdc.html 中的内容之外,您还有其他提示吗? 【参考方案1】:

在 try-finally 块中使用 remove(..) 清除 MDC put(..)

MDC.put("system", "fedora");
try 
    // your code here
 finally 
    MDC.remove("system");

这样在您的代码运行后不会保留任何状态。

【讨论】:

以上是关于SLF4J MDC 的替代品的主要内容,如果未能解决你的问题,请参考以下文章

使用 MDC 的 JOOQ 日志

基于Slf4j的MDC实现日志链路串联

基于Slf4j的MDC实现日志链路串联

通过slf4j/log4j的MDC/NDC 实现日志追踪

Slf4j MDC 使用和 基于 Logback 的实现分析

log4j2中的MDC分析