gpt4 book ai didi

java - 在 Log4j2 初始化后配置 FileAppender

转载 作者:行者123 更新时间:2023-11-30 08:37:50 25 4
gpt4 key购买 nike

我在为我的 log4j2 记录器配置新的 FileAppender 时遇到问题。问题是我只知道我应该在应用程序启动后 附加我的日志的文件的路径,所以我尝试按照这些说明进行操作 here log4j2初始化后修改原有配置

我已经阅读了很多关于堆栈溢出的类似问题的答案,但其中大部分是针对早期 log4j 版本的,并且不会工作,因为他们现在已经将面向配置的插件实现到 log4j 中本身。

应用程序成功创建日志文件,但不会向其中写入任何内容。我故意将该测试日志消息置于 ERROR 级别,以便我可以验证它与日志级别阈值或其他问题无关。

我是 log4j2 配置的新手,此时感觉有点迷茫。

我的 log4j2.xml 文件(非常基本)如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
<Property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}"/>
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>

此外,这是应该添加新的 FileAppender 的方法:

public static void initLogFile(String path, Level level) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
Layout layout = PatternLayout.createDefaultLayout(config);
Appender appender = FileAppender.createAppender(path, "false", "true",
"RollingFile", "true", "false", "false", "8000", null, null,
"false", null, config);
appender.start();
config.addAppender(appender);
AppenderRef ref = AppenderRef.createAppenderRef("RollingFile", null,
null);
AppenderRef[] refs = new AppenderRef[] { ref };
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", level,
"org.apache.logging.log4j", "true", refs, null, config, null);
loggerConfig.addAppender(appender, null, null);
config.addLogger("org.apache.logging.log4j", loggerConfig);
ctx.updateLoggers();
System.out.println("Logger initialized");
}

还有我的 Main 方法,它做的第一件事就是尝试更改记录器配置以写入我想要的文件:

static final Logger log = LogManager.getLogger(Main.class.getName());
public static void main( String[] args )
{
// Init
System.out.println("Initializing logger");
Utils.initLogFile("C:/Users/Jorge/Desktop/logtest/test.log", Level.DEBUG);

log.error("test error message");

...
}

最佳答案

应用启动后才知道路径是什么意思?无论如何,您应该始终能够使用 Lookup 来确定文件路径。如果路径被指定为应用程序的参数之一,您应该能够使用主要参数查找。

为了清楚起见,您的配置应该类似于:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
<Property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="${PATTERN}"/>
</Console>
<File name="file" fileName="${main:--logFile}">
<PatternLayout pattern="${PATTERN}"/>
</File>
</Appenders>
<Loggers>
<Logger name="org.apache.logging.log4j" level="${main:--level}">
<AppenderRef ref="file"/>
</Logger>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>

请注意,我已经配置了一个 File appender。您的示例代码正在创建一个文件附加程序,但出于某种原因将其命名为“RollingFile”。

关于java - 在 Log4j2 初始化后配置 FileAppender,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36891383/

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