获取 Log4j2 日志文件位置以写入包含日期的目录

Get Log4j2 log file location to write to directory containing a date

如何获取 log4j 日志文件的位置?我试过这个:Where can i programatically find where the log4j log files are stored?

但它不适用于较新版本的 log4j。

我正在创建其中包含系统日期的文件,但是当我检索路径时,时间戳会发生变化。

如果你配置了一个appender如下:

<File name="Technical" 
      fileName="app/${date:yyyy-MM-dd HHmmss}/logTechnical.log">
  <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
</File>

您可以获得如下目录:

import java.io.File;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.FileAppender;
import org.apache.logging.log4j.core.config.Configuration;

...

LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
FileAppender techical = (FileAppender) config.getAppender("Technical");
File dir = new File(techical.getFileName().replaceFirst("[^\/]+$", ""));

如果对某人有帮助,我的情况略有不同: 我有外部代码试图获取旧的 log4j FileAppender 实例,纯粹是为了获取文件路径。

当我升级到上面不再可行的 log4j2 时,我更新了我的实用程序 class 以巧妙地修改 Paul Vargas 答案和直接 return 文件位置。本质上,只是取消了 File 对象实例的构造:

    public static String getFileAppenderPath() {
        LoggerContext ctx = (LoggerContext) LogManager.getContext(true);
        Configuration config = ctx.getConfiguration();
        FileAppender rollingFileAppender = (FileAppender) config.getAppender("RollingFileAppender");
        return rollingFileAppender.getFileName().replaceFirst("[^\/]+$", "");
    }