【发布时间】:2026-02-13 12:55:01
【问题描述】:
我正在从 log4j1 迁移到 log4j2,但正如许多人所说,getAllAppenders 方法不再存在。
我有两段代码要替换,但我没有找到一个漂亮的方法:
try {
// termination
@SuppressWarnings("unchecked")
Enumeration<Appender> appenders = Logger.getRootLogger().getAllAppenders();
if(appenders != null) {
while (appenders.hasMoreElements()) {
Appender appender = appenders.nextElement();
if (appender instanceof AsyncAppender) {
appender.close();
}
}
}
} catch(Exception e) {
//forget exception
}
第二个是:
Logger rootLogger = Logger.getRootLogger();
FileAppender fileAppender = (FileAppender) ((AsyncAppender) rootLogger.getAppender("ASYNC")).getAppender("file");
mailService.sendAlertForFXTraderSupport(env, user, new File(fileAppender.getFile()),executionFolder);
我的 log4j2:
<?xml version="1.0" encoding="UTF-8"?>
<Appenders>
<Console name="stdout" target="SYSTEM_OUT">
<PatternLayout pattern="%-d{yyyy MMM dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n" />
</Console>
<RollingFile name="file"
fileName="C:/temp/tetrafx-gui-dev-${tetrafx.location}.log"
filePattern="C:/temp/$${date:yyyy-MM-dd}/tetrafx-gui-dev-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%-d{yyyy MMM dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
</RollingFile>
<Async name="ASYNC" bufferSize="1000">
<AppenderRef ref="stdout" />
<AppenderRef ref="file" />
</Async>
</Appenders>
<Loggers>
<Root level="all">
<AppenderRef ref="ASYNC" />
</Root>
</Loggers>
您对此有什么建议吗?
谢谢
【问题讨论】:
标签: java logging configuration log4j log4j2