-6ren">
gpt4 book ai didi

java - 以编程方式查找 log4j2 (beta9) 日志文件名

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:17:23 25 4
gpt4 key购买 nike

我正在使用 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 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"”位?我真的不想对此进行硬编码。

最佳答案

Logger 中,遍历所有 getAllAppenders 寻找实现 RollingFileAppender 的那个,然后调用 getFile在上面。或者您可以使用 getAppender("RollingFile") 代替,如果您不介意对 appender 的名称进行硬编码的话。

对于 Log4j 1:

public static final Logger LOG = Logger.getLogger(YourClass.class);

public File getLoggerFile() {
Appender appender = LOG.getAppender("RollingFile");
return appender.getFile();
}

对于 Log4j 2:(注意这需要非接口(interface)记录器)

public static final Logger LOG = LogManager.getLogger(YourClass.class);

public String getLoggerFileName() {
org.apache.logging.log4j.core.Logger loggerImpl = (org.apache.logging.log4j.core.Logger) LOG;
Appender appender = loggerImpl.getAppenders().get("RollingFile");
// Unfortunately, File is no longer an option to return, here.
return ((RollingFileAppender) appender).getFileName();
}

关于java - 以编程方式查找 log4j2 (beta9) 日志文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21633824/

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