multithreading - Log4J - 类似 SiftingAppender 的功能

标签 multithreading log4j spring logback

我在一个使用 Log4J 的项目中工作.要求之一是为每个线程创建一个单独的日志文件;这本身就是一个奇怪的问题,通过动态创建一个新的 FileAppender 并将其附加到 Logger 实例来进行排序。

Logger logger = Logger.getLogger(<thread dependent string>);
FileAppender appender = new FileAppender();
appender.setFile(fileName);
appender.setLayout(new PatternLayout(lp.getPattern()));
appender.setName(<thread dependent string>);
appender.setThreshold(Level.DEBUG);
appender.activateOptions();
logger.addAppender(appender);

一切都很顺利,直到我们意识到我们使用了另一个库 - Spring Framework v3.0.0(使用 Commons Logging ) - 不使用上述技术 - Spring 日志记录数据仅由从 log4.configuration 文件初始化的 Appenders “看到”,而不是由运行时创建的 Appenders “看到”。 所以,回到第一方。

经过一番调查,我发现新的和改进的LogBack有一个附加程序 - SiftingAppender – 这正是我们需要的,即独立文件的线程级日志记录。

目前,迁移到 LogBack 不是一种选择,所以,被 Log4J 卡住了,我怎样才能实现类似 SiftingAppender 的功能并让 Spring 保持快乐?

注意:Spring 仅用于 JdbcTemplate功能,没有 IOC;为了将 Spring 的 Commons Logging “ Hook ”到 Log4J,我在 log4j.properties 文件中添加了这一行:

log4j.logger.org.springframework=DEBUG

按照指示here .

最佳答案

在 Log4j2 中,我们现在可以使用 RoutingAppender :

The RoutingAppender evaluates LogEvents and then routes them to a subordinate Appender. The target Appender may be an appender previously configured and may be referenced by its name or the Appender can be dynamically created as needed.

来自他们的FAQ :

How do I dynamically write to separate log files? Look at the RoutingAppender. You can define multiple routes in the configuration, and put values in the ThreadContext map that determine which log file subsequent events in this thread get logged to.

关于multithreading - Log4J - 类似 SiftingAppender 的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1929609/

相关文章:

java - 没有 volatile 示例的损坏的单例

java - 自定义 log4j 适配器

java - 为什么通过 Spring 加载 log4j2.xml 会为 log4j1 类抛出 NoClassDefFoundError?

java - 关于两个线程的同步

c++ - 在锁下清除 std::map 与移动到临时对象

java - Spring @RequestBody : the request sent by the client was syntactically incorrect

java - 如何作为后台线程启动 Spring Batch 作业

java - 自定义 Hibernate validator Spring Boot

java类连续2-3分钟后调用rest api

java - Log4J 2配置: How to split log files by size and by day at the same time?