Java NDC日志是什么?我们如何在应用程序中使用它?它的意义是什么

Java NDC日志是什么?我们如何在应用程序中使用它?它的意义是什么,java,struts,Java,Struts,NDC日志是什么,我们如何在应用程序中使用它,它的意义是什么…NDC代表“嵌套诊断上下文”,它是log4j的一个功能。log4j最常见的用法是只记录东西,而不显示它是什么客户端请求的一部分,结果是,当您的应用程序在生产环境中运行时,所有请求的所有日志消息都在日志文件中混杂在一起,并告诉谁做了不可能的事情。NDC允许您将日志消息标记为属于特定客户端,这样您就可以区分谁在做什么,而无需为每个客户端使用单独的记录器。嵌套的诊断上下文是线程特有的 常见用途是记录每个会话的信息(如果会话使用一个线程),因

NDC日志是什么,我们如何在应用程序中使用它,它的意义是什么…

NDC代表“嵌套诊断上下文”,它是log4j的一个功能。log4j最常见的用法是只记录东西,而不显示它是什么客户端请求的一部分,结果是,当您的应用程序在生产环境中运行时,所有请求的所有日志消息都在日志文件中混杂在一起,并告诉谁做了不可能的事情。NDC允许您将日志消息标记为属于特定客户端,这样您就可以区分谁在做什么,而无需为每个客户端使用单独的记录器。

嵌套的诊断上下文是线程特有的

常见用途是记录每个会话的信息(如果会话使用一个线程),因此您可以记录原始客户端、用户名等以及其他横切属性,而无需:

  • 通过应用程序的各个层传递这些属性
  • 在每个log语句中显式记录它们。如果
    模式布局
    配置得当,Log4j将输出NDC
  • 另请参见Log4j的映射诊断上下文。

    记录器通常在代码中静态定义,这使得日志有时难以理解

    允许动态地
    push
    一个参数,该参数将显示在线程发出的每个后续日志行中,直到
    pop
    ped为止

    如果您需要类似以下日志的日志,则此选项非常有用:

    [request=x] a
    [request=y] a
    [request=x] b
    [request=x] c
    [request=y] b
    [request=x] d
    [request=y] c
    [request=y] d
    
    (免责声明:我不记得确切的格式)

    只使用
    a、b、c、d
    很难理解哪个线程做什么。如果动态地
    推送
    弹出
    请求id,则更容易遵循。也可以用于其他类型的上下文信息