繁体   English   中英

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

[英]Get Log4j2 log file location to write to directory containing a date

如何获取 log4j 日志文件的位置? 我试过这个: 我可以在哪里以编程方式找到 log4j 日志文件的存储位置?

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

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

如果已按以下方式配置了追加程序:

<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 时,我更新了我的实用程序类以巧妙地修改Paul Vargas 的答案并直接返回文件位置。 本质上,只需取消 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("[^\\/]+$", "");
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM