【问题标题】:Why we use MDC.remove() in Logback/SLF4J?为什么我们在 Logback/SLF4J 中使用 MDC.remove()?
【发布时间】:2014-05-14 06:13:58
【问题描述】:

我知道 MDC 在客户端服务器中使用,记录是为了找出哪个日志是针对哪个客户端的。 (reference)

但是为什么我们使用MDC.remove()

是内存效率问题吗?

【问题讨论】:

    标签: logging slf4j logback mdc


    【解决方案1】:

    另一个原因是该值已过时。例如,如果您在 MDC 中有一个用户名,但该用户已经注销,则您的信息已过时。如果您仍然记录它,它可能会完全误导调试。

    【讨论】:

    • 嗯,这是一个很好的观点,但据我所知,MDC 是为了明确哪个客户端做了哪些日志语句,但是如果一个客户端已经注销,那么就不会再发生日志记录了,而且我们没有任何误导性的日志消息!
    • @user3593084:考虑这种情况,客户端可以在登录和未登录的情况下看到主页,并且应用程序会记录该页面。在后一种情况下(未登录),日志消息不应包含用户名。
    • 我不明白客户在没有记录的情况下看到页面,所以它不能做任何事情,所以不会发生记录!
    • @user3593084:我不完全理解您不理解的内容:) 无论如何,由于“登录”(使用用户/通行证进行身份验证)和“日志”(将消息写入文件)是不同的东西。
    【解决方案2】:

    通常,put() 操作应与相应的 remove() 操作相平衡。否则,MDC 将包含某些键的陈旧值。我们建议尽可能在 finally 块中执行 remove() 操作,以确保无论代码的执行路径如何都能调用它们。

    【讨论】:

      猜你喜欢
      • 2018-12-09
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多