2010-06-15 16 views
2

我有一个用Java编写的web应用程序,并且我有一个线程池。使用log4j在Java中记录一个线程

该应用程序非常庞大,我无法进行重大更改,例如,我无法更改log4j。

我在线程池中执行一个批处理过程,并且我想记录执行该过程的所有内容。

线程池中始终只有一个线程处于活动状态。

任何想法,我该怎么做?

+0

我忘了提,当我说“记录所有”我的意思是在错误和信息模式下有预先配置的记录器。我想打印/有/处理调试记录器的调试消息。我创建了我自己的Appender,但它不像我预期的那样工作。 – Javier 2010-06-16 22:08:44

回答

1

我假设这一切都是你所提到的单个线程上执行,并通过一切,我的意思是你的一切感兴趣的

如果你可以改变log4j的配置文件,包括日志格式串线程ID ,那么你可以使用一个工具(例如grep)将日志过滤到该线程。

+0

我有我自己的appender。这是一个Web应用程序,所以还有其他线程,但我只想记录来自批处理线程的所有内容。 – Javier 2010-06-16 22:06:56

+0

我所建议的是,你记录了所有的东西,但是根据批处理过程的线程ID在写入日志之后过滤日志。 – 2010-06-16 23:59:02

1

我想象你有其他的线程,比如你不想记录的请求线程,并且你想只记录从批处理到专用日志文件的事件。

要将批次中的所有日志写出到日志文件中,您需要在运行时对log4j config进行一些运行时调整。您可以在批处理开始时添加这些更改,并在批处理完成时删除更改 - 静态log4j应用程序配置不会更改,并且运行时log4j配置更改不会影响应用程序的其余部分。

这些都是你做启用日志只是该批次的变化:

  • 在该批次开始,添加一个新的appender到要从capure日志Cataegory /记录器实例。这可能是根类别来记录所有日志而不管类别。
  • 新的appender使用当前线程(运行批处理的线程池线程)进行配置。 appender使用它作为其内部过滤的一部分,只从给定线程写出日志。自定义appender通过简单地委派给一个普通的appender来写日志,这是一个写出日志到你想要的地方。
  • 而该批次结束后,(通过设置登录线程为空或只是禁用的附加器。)从类别中删除记录
+0

这个想法看起来很有趣。我会试试看。谢谢。 – Javier 2010-06-16 22:11:07

相关问题