【发布时间】:2022-01-19 21:13:06
【问题描述】:
我有一个在 xml 中定义了 log4j 属性的项目。
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration>
<Appenders>
<File name="LogFileAppender" fileName="${sys:logFileName:-default}" append="false">
<PatternLayout>
<Pattern>%d [%t] %p - %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="LogFileAppender"/>
</Root>
</Loggers>
</Configuration>
在发生任何日志记录以获取正确的输出文件夹之前,我将 fileName 值更新为代码中的正确路径。
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();
}
在大多数情况下,一切都按预期进行。日志文件输出到正确的 logPath 并写出数据。但是,在我们到达 initializeLoggers() 之前,在默认项目目录中创建了一个名为“default”的文件,因为调用
static Logger log = LogManager.getLogger(MyClass.class); // Logging
在代码的顶部。
我发现不生成“默认文件”,只需将字段留空,如下所示:
fileName="${sys:logFileName:-}"
但是这样做代码会抱怨并给出错误,因为该属性在特定时间为空。
2022-01-19 13:07:51,936 main ERROR 参数为空:fileName 2022-01-19 13:07:51,944 主要错误无法创建类型的插件 类 org.apache.logging.log4j.core.appender.FileAppender 元素 文件 org.apache.logging.log4j.core.config.ConfigurationException: 为元素 File 提供的参数无效:字段 'fileName' 具有 无效值 '' 在 org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.injectFields(PluginBuilder.java:210)
有什么办法可以解决这个问题
- 不生成未使用的“默认文件”
- 不会引发有关空值的错误
【问题讨论】: