使用log4j在Java中记录一个线程
我有一个用Java编写的web应用程序,还有一个线程池 这个应用程序非常庞大,我无法进行重大更改,例如,我无法更改log4j 我正在线程池中执行一个批处理过程,我想记录为执行该过程而执行的所有操作 线程池中始终只有一个线程处于活动状态使用log4j在Java中记录一个线程,java,multithreading,log4j,Java,Multithreading,Log4j,我有一个用Java编写的web应用程序,还有一个线程池 这个应用程序非常庞大,我无法进行重大更改,例如,我无法更改log4j 我正在线程池中执行一个批处理过程,我想记录为执行该过程而执行的所有操作 线程池中始终只有一个线程处于活动状态 你知道我该怎么做吗?我假设一切都是在你提到的单个线程上执行的,我所说的一切都是指你感兴趣的一切 如果您可以更改log4j配置文件,使其在日志格式字符串中包含线程ID,那么您可以使用工具(例如grep)将日志过滤到该线程。我想您还有其他线程,例如不想记录的请求线程,
你知道我该怎么做吗?我假设一切都是在你提到的单个线程上执行的,我所说的一切都是指你感兴趣的一切
如果您可以更改log4j配置文件,使其在日志格式字符串中包含线程ID,那么您可以使用工具(例如grep)将日志过滤到该线程。我想您还有其他线程,例如不想记录的请求线程,只想将批处理中的事件记录到专用日志文件中 要按批将所有日志写入日志文件,需要在运行时对log4j配置进行一些运行时调整。在批处理开始时添加这些更改,并在批处理完成后删除这些更改-静态log4j应用程序配置不会更改,运行时log4j配置更改不会影响应用程序的其余部分 以下是您为仅为批次启用日志记录所做的更改:
- 在批处理开始时,向要从中获取日志的Cataegory/Logger实例添加新的appender。这很可能是记录所有日志的根类别,而不考虑类别
- 使用当前线程(批处理运行的线程池线程)配置新的appender。appender将此作为其内部筛选的一部分,仅从给定线程写出日志。自定义appender通过简单地将日志委托给常规appender来写入日志,即将日志写出到您想要的任何地方
- 在批处理结束时,将记录器从类别中删除(或者通过将记录的线程设置为null来禁用appender)