0

我有一个遗留的日志记录类。它有一个静态 Logger 引用(名为 logger)和一堆静​​态方法。

每个方法都接受一个字符串输入并将其写入 System.out.println 并在 logger 不为空时写入 logger。

它有一个初始化记录器的构造函数。但是这个构造函数只有包范围,我很确定它不会在任何地方被调用。因此 logger 始终为 null 并且该类基本上只执行 System.out.println

我想更改它,以便它可以在多线程应用程序中使用,其中每个线程都写入自己唯一的 FileAppender。

这就是我卡住的地方。

基本上,我想做的是让这个静态类与一堆不同的 log4j FileAppender 相关联。每个 FileAppender 都可以由 Thread 创建,文件名可以从 Thread 已知的唯一信息中导出。

我不知道该怎么做是神奇地使用 Log4j 将该线程的唯一 FileAppender 传达给这个遗留日志记录类。

想法?提示?建议?

标记

4

1 回答 1

0

可以使用 RoutingAppender 和 ThreadContext 映射动态更改目标日志文件名。

这一切都可以通过配置来完成(不需要线程创建 FileAppenders 的自定义代码)。在 RoutingAppender 配置中,您可以指定要用于切换目标 FileAppender 的 ThreadContext 键。例如,您可以使用字符串“ROUTINGKEY”。每个线程在 ThreadContext 映射中为键“ROUTINGKEY”放置一个唯一值,该值用于选择日志事件路由到的 Appender。您甚至可以将其设置为动态创建在文件名中具有 ROUTINGKEY 值的日志文件,因此不需要提前知道所有目标日志文件。

FAQ页面有一个很好的例子: http: //logging.apache.org/log4j/2.x/faq.html#separate_log_files

于 2013-10-19T03:54:32.157 回答