gpt4 book ai didi

java - 使用 Log4j2 2.8.1 在运行时动态添加文件日志记录

转载 作者:行者123 更新时间:2023-11-30 06:06:41 28 4
gpt4 key购买 nike

我需要以编程方式添加文件日志记录,并动态生成文件名。

我的代码是这样的:

private static final Logger LOGGER = LogManager.getLogger(Archiver.class);

public static void openLogfile(String folder) {
String dateTime = "TODO";
String fileName = folder + "upload" + dateTime + ".log";
LOGGER.info("Opening " + fileName + " for logging.");
// setting up a FileAppender dynamically...
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
Layout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, null, config, null,
null, true, true, null, null);
Appender appender = FileAppender.createAppender(fileName, "false", "false", "File", "true",
"false", "false", "4000", layout, null, "false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("File", null, null);
AppenderRef[] refs = new AppenderRef[]{ref};

LoggerConfig loggerConfig = LoggerConfig.createLogger(true, Level.DEBUG, "org.apache.logging.log4j", "", refs,
null, config, null);

loggerConfig.addAppender(appender, null, null);
config.addLogger("org.apache.logging.log4j", loggerConfig);
ctx.updateLoggers();

}

我看了菜谱How to add Log4J2 appenders at runtime programmatically?http://logging.apache.org/log4j/2.x/manual/customconfig.html#AddingToCurrent .

我的问题是:

  • 上面提到的 log4j2 文档中的示例无法编译,它已过时,必须添加几个参数而不太清楚它们是什么,通常我添加的是空值。
  • 文档中使用的方法现在已弃用;
  • 正在创建文件,但没有日志出现,尽管在控制台上有输出,并且在程序退出后,文件中也没有刷新任何内容。

有人可以提供一个带有 log4j2 最新 API 的下降示例来动态添加文件日志记录吗?我使用 org.apache.logging.log4j 2.8.1。

最佳答案

根据评论中的其他信息,这是我的建议。出于您在问题中提到的所有原因,我认为您不需要以编程方式执行此操作。

相反,您可以使用类似以下示例的内容配置 log4j2 系统。请注意,您不一定需要控制台附加程序,我只是将其用于测试。

log4j2.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="[%date{ISO8601}][%-5level][%t] %m%n" />
</Console>
<File
fileName="logs/${ctx:fileName}.txt"
name="logFile">
<PatternLayout>
<Pattern>[%date{ISO8601}][%-5level][%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Logger name="example" level="TRACE" additivity="false">
<AppenderRef ref="STDOUT" />
<AppenderRef ref="logFile" />
</Logger>
<Root level="WARN">
<AppenderRef ref="STDOUT" />
</Root>
</Loggers>
</Configuration>

Java代码:

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;

public class LogFileNameBasedOnArg0Main {

public static void main(String[] args) {
ThreadContext.put("fileName", args[0]);
Logger log = LogManager.getLogger();
log.info("Here's some info!");
}

}

输出:

我使用了“myFile”的程序参数来生成文件:logs/myFile.txt,内容如下:

[2017-05-03T11:20:37,653][INFO ][main] Here's some info!

您应该能够修改此示例以满足您的需要,并且您不必进行任何编程配置,从而避免您提到的问题。

关于java - 使用 Log4j2 2.8.1 在运行时动态添加文件日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43569394/

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