【问题标题】:How to get logs from current thread only in log4j如何仅在 log4j 中从当前线程获取日志
【发布时间】:2014-08-20 11:14:36
【问题描述】:

我想在我的应用程序中截取特定线程的日志一段时间。我正在使用 log4j。 下面的代码可以做到这一点,但我也从其他线程获取日志。

                WriterAppender appender = new WriterAppender(new PatternLayout("%d{ISO8601} %p - %m%n"), consoleWriter);

                appender.setName("STR_APPENDER");
                appender.setThreshold(org.apache.log4j.Level.INFO);
                Logger.getRootLogger().addAppender(appender); 
                //Some Logic here (I'm using other classes and jars here and I want to get this logs as well)
                Logger.getRootLogger().removeAppender("STR_APPENDER");

我知道 Logger.getRootLogger() 在这里不是一个好的解决方案,但我没有任何其他想法。

【问题讨论】:

  • 您可以使用自己的附加程序(也许只是一个包装器)并检查调用它的线程。你会告诉 appender 哪些线程的消息要转发,例如通过将线程或其 id 传递给 appender 的构造函数。
  • 托马斯好主意,谢谢!

标签: java multithreading logging log4j


【解决方案1】:

你可以使用MDC.put.

例如

MDC.put("threadName",Thread.currentThread().getName());

使用它可以输入线程名称。

使用 Log4j appender,您可以在日志中打印线程名称 [%X{threadName}

【讨论】:

    猜你喜欢
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2012-02-06
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多