代码之家  ›  专栏  ›  技术社区  ›  mabuzer

用java登录多线程应用程序

  •  8
  • mabuzer  · 技术社区  · 15 年前

    在多线程环境中记录日志的最佳方式和工具是什么,以便每个线程都有自己的日志实例和单独的文件。这有可能吗?

    3 回复  |  直到 15 年前
        1
  •  6
  •   Vladimir Dyuzhev    15 年前

    您可以尝试使用定制的Log4J appender,它将线程id作为参数,并根据线程调用的内容过滤消息。动态创建,并将其连接到记录器。

    不过,这种方法存在多个问题:

    1. 应用服务器通常有一个线程池。这意味着随着时间的推移,同一个线程将参与执行完全不相关的请求,这些请求最终将出现在同一个日志文件中。

    我建议您考虑一种更简单的方法:将线程id记录到同一个日志文件中。它既快速又简单,log4j有一个%标志。以后,如果需要,可以根据线程id对日志文件进行grep/拆分。

    :

        2
  •  4
  •   GenEric35    15 年前

    我有一个多线程应用程序,它可以识别日志文件中的每个线程(不知道多个文件,单个文件显示我的一致性),识别线程是由日志框架自动完成的,它是 Log4J

    <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender" >
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
    

    以下是其他常见的 Java logging frameworks

        3
  •  1
  •   Dima    15 年前

    在某些情况下,了解线程标识符远不如了解执行上下文重要。对于大量的线程和更大的应用程序来说尤其如此。当线程ID发生变化,但实际执行上下文实际上是相同的(如线程池中提到的)时,您会怎么做?。我宁愿用MDC (mapped diagnostic context) 跟踪日志中的执行上下文。这样更好,因为你可以控制上下文。最后,您可以将日志的布局设置为包含MDC,然后轻松筛选出相关的内容。退房 this tool ,它用MDC做了很多事情。