【发布时间】:2015-10-05 13:05:14
【问题描述】:
我正在将我的应用程序从 log4j 迁移到 log4j2。请在下面找到从应用程序当前线程获取输入(例如模式为mode1)并将其附加到日志文件名(例如log_mode1.log)并创建附加程序并更新日志文件的类。
类:
public class MultiFileAppender extends AppenderSkeleton {
...
@Override
protected void append(LoggingEvent event) {
...
}
@Override
public void close() {
}
@Override
public boolean requiresLayout() {
...
}
}
log4j.xml 中的附加内容:
<appender name="TEST_MULTIFILE" class="com.test.it.logging.MultiFileAppender">
<param name="File" value="${LOGS}/test/test_%id%.log"/>
<param name="Append" value="true"/>
<param name="MaxFileSize" value="500KB"/>
<param name="MaxBackupIndex" value="5"/>
<param name="Encoding" value="UTF-8"/>
</appender>
如何在 java 中获取这些参数并像上面 log4j2 中的配置一样创建多文件附加器?请帮忙。谢谢。
【问题讨论】:
-
请问这个
MultiFileAppender的目的是什么?顾名思义,就好像您想将相同的日志条目写入多个文件一样。如果是这样,您不需要自定义类来执行此操作,可以通过在 log4j 和 log4j2 中配置标准附加程序来完成。但也许您有无法解决的特殊要求? -
非常感谢您的回复。将从当前运行的线程中获取不同的模式(例如 mode1、mode2、mode3..),并且日志内容将转到名称包含该模式的相应日志文件(例如 test_mode1.log)。
-
你能根据模式创建一个不同的
Logger对象名,并用它来控制将日志语句写入哪个文件吗?如果你通常使用LogManager.getLogger()来获取名为my.package.Test的记录器,你可以使用LogManager.getLogger(Test.class.getName() + ".mode1")来获取名为my.package.Test.mode1的记录器,依此类推。 -
感谢您的回复.. 罗杰。在这种情况下,模式输入是动态的。所以,我相信这不能通过 LogManager.getLogger(Test.class.getName() + ".mode1") 来实现。请确认我的理解。
-
我可以添加一个答案(而不是这些 cmets),但这将是我认为您的问题的答案。也许您可以编辑描述您最初问题的问题?将当前问题的大部分内容留在最后,作为您尝试过的内容的描述。
标签: java jakarta-ee log4j log4j2