我有一个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>
在读入.xml之后,我在java中设置了logger fileNames的完整路径。
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主要错误文件管理器(${sys:logFileName})java.io. IO异常:文件名、目录名或卷标语法不正确。java.io。IOException:文件名、目录名或卷标语法不正确
2022-01-18 15:05:26,693 main ERROR无法为元素创建类org.apache.logging.log4j.core.appender.FileAppender类型的插件文件:java.lang.IllegalStateException:管理器工厂无法为包含数据的[${sys:logFileName}]创建管理器[文件管理器$FactoryData@61009542] java.lang.非法状态异常:管理器工厂[文件管理器$FileManagerFactory@4d826d77]无法使用数据[文件管理器$FactoryData@61009542]为[${系统:日志文件名}]创建管理器
2022-01-18 15:05:26,699 main ERROR无法为元素调用类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
1条答案
按热度按时间wxclj1h51#
在用文件名值初始化记录器之前,代码调用了LogManager.getLoggers()。我只是像这样设置了默认值,现在代码运行没有错误: