gpt4 book ai didi

multithreading - Log4J - 类似 SiftingAppender 的功能

转载 作者:IT老高 更新时间:2023-10-28 13:50:24 26 4
gpt4 key购买 nike

我在一个使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com