我有一个log4j2.xml文件,用于定义一些输出到.log文件的记录器。
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d{MM-dd HH:mm:ss } %p - %m%n"/>
</Console>
<File name="LogFileAppender" fileName="${sys:logFileName}" append="false">
<PatternLayout>
<Pattern>%d [%t] %p - %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="LogFileAppender"/>
</Root>
</Loggers>
</Configuration>
在fileNames已被读取之后,我在java中为记录器.xml设置了完整的路径。
public static void initializeLoggers(String logPath)
{
// set output paths for log files
System.setProperty("logFileName", logPath + "PROJECT.log");
// reconfigure loggers with paths
org.apache.logging.log4j.core.LoggerContext ctx =
(org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
ctx.reconfigure();
}
代码按预期工作,日志输出到更新的路径,但我在下面遇到以下这些错误:
2022-01-18 15:05:26,685主要错误FileManager (${sys:logFileName}) java.io.IOException:文件名、目录名或卷标签语法不正确java.io.IOException:文件名、目录名或卷标签语法不正确
2022-01-18 15:05:26,693主要错误无法为元素文件创建类型为org.apache.logging.log4j.core.appender.FileAppender的插件: java.lang.IllegalStateException: ManagerFactory org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory@4d826d77无法为${sys:logFileName}创建${sys: logFileName} with data org.apache.logging.log4j.core.appender.FileManager$FactoryData@61009542 java.lang.IllegalStateException: ManagerFactory org.apache.logging.log4j.core.appender.FileManager$FileManagerFactory@4d826d77无法为${sys创建管理器:使用数据org.apache.logging.log4j.core.appender.FileManager$FactoryData@61009542的logFileName}
2022-01-18 15:05:26,699主要错误无法在类org.apache.logging.log4j.core.appender.FileAppender中调用工厂方法,用于元素文件: java.lang.IllegalStateException:未为类org.apache.logging.log4j.core.appender.FileAppender找到工厂方法java.lang.IllegalStateException:未为org.apache.logging.log4j.core.appender.FileAppender类调用工厂方法
这很奇怪,因为我将其更新到的路径是正确的,生成的日志将与所需目录中的所有信息一起输出。在initializeLoggers()之前也没有日志记录。任何帮助都将不胜感激!I referenced this post for the properties updating solution
发布于 2022-01-19 16:52:18
在用文件名值初始化记录器之前,代码正在调用LogManager.getLoggers()。我只是将默认值设置为so,代码现在运行时没有错误:
<File name="LogFileAppender" fileName="${sys:logFileName:-default}" append="false">
<PatternLayout>
<Pattern>%d [%t] %p - %m%n</Pattern>
</PatternLayout>
</File>
https://stackoverflow.com/questions/70763526
复制相似问题