简体   繁体   English

如何仅在log4j中从当前线程获取日志

[英]How to get logs from current thread only in log4j

I want to intercept logs from the specific thread in my application for the certain period of time. 我想在一段时间内拦截来自应用程序中特定线程的日志。 I'm using log4j. 我正在使用log4j。 The code below does that, but I'm getting logs from others threads too. 下面的代码可以做到这一点,但是我也从其他线程获取日志。

                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");

I'm aware that Logger.getRootLogger() is not a good solution here, but I don't have any other idea. 我知道Logger.getRootLogger()在这里不是很好的解决方案,但我没有其他想法。

You can use MDC.put. 您可以使用MDC.put.

eg 例如

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

Using that you can put thread name. 使用它,您可以放置​​线程名称。

Using Log4j appender you can print the thread name [%X{threadName} in logs 使用Log4j附加程序,您可以在日志中打印线程名称[%X {threadName}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM