Java 以编程方式查找log4j2(beta9)日志文件名
我使用的是Java 1.7和Log4j2(beta9),我有以下Log4j2.xml文件:Java 以编程方式查找log4j2(beta9)日志文件名,java,log4j2,Java,Log4j2,我使用的是Java 1.7和Log4j2(beta9),我有以下Log4j2.xml文件: <?xml version="1.0" encoding="UTF-8"?> <Configuration status="info"> <Appenders> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="[%d{dd/MMM/yyyy
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{dd/MMM/yyyy HH:mm:ss.SSS}]> %-5p - %m%n"/>
</Console>
<RollingFile name="RollingFile" fileName="logs/foo.log" filePattern="logs/foo-%d{dd-MMM-yyyy}-%i.log">
<Policies>
<OnStartupTriggeringPolicy/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="10"/>
<PatternLayout pattern="[%d{dd/MMM/yyyy HH:mm:ss.SSS}]> %-5p - %m%n"/>
</RollingFile>
<Async name="ASYNC">
<AppenderRef ref="RollingFile"/>
<AppenderRef ref="CONSOLE"/>
</Async>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ASYNC"/>
</Root>
</Loggers>
</Configuration>
就日志本身而言,它满足了我的需要
作为错误/异常序列的一部分,我需要发送一封带有日志文件作为附件的电子邮件
如何以编程方式获取'fileName=“logs/foo.log”'位?我真的很不愿意硬编码。从
记录器
,迭代所有getAllAppenders
,寻找实现RollingFileAppender
的一个,然后调用getFile
。或者,如果您不介意硬编码appender的名称,也可以使用getAppender(“RollingFile”)
对于Log4j 1:
public static final Logger LOG = Logger.getLogger(YourClass.class);
public File getLoggerFile() {
Appender appender = LOG.getAppender("RollingFile");
return appender.getFile();
}
对于Log4j 2:(注意,这需要非接口记录器)
保罗的回答是正确的,只是稍作修改:
public static String getLoggerFile( Logger log ) {
org.apache.logging.log4j.core.Logger loggerImpl = (org.apache.logging.log4j.core.Logger) log;
Appender appender = loggerImpl.getAppenders().get("RollingFile");
return ((RollingFileAppender) appender).getFileName();
}
答案全归功于保罗 铸造等级较低的替代方法:
RollingFileAppender appender = (RollingFileAppender) LoggerContext.getContext().getConfiguration()
.getAppenders().get("myRfAppenderName");
String logFile = appender.getFileName();
log4j smpt appender是一个选项吗?它会给你记录的任何东西发送电子邮件,包括异常。我很担心内存问题,但我会尝试一下。SMTP appender是一个不错的选择,但遗憾的是,我的情况不是这样。对于那些感兴趣的人,好吧,你明白了。我在Java方面很差劲,无法让它工作。你能提供一个样品吗?对不起,最初没有注意到Log4j 2的要求。扩展答案。哦,我明白了,它现在返回文件名,而不是文件对象。更新了我的答案。
RollingFileAppender appender = (RollingFileAppender) LoggerContext.getContext().getConfiguration()
.getAppenders().get("myRfAppenderName");
String logFile = appender.getFileName();