正如问题标题所述,如果 log4j2 File Appender 日志文件不存在,是否可以避免创建它们的父文件夹?
实际上,当我传递文件附加器日志的不存在的父文件夹时,log4j2 将自动创建它。
我已经尝试查看 File
标记上是否有属性,但什么也没有。
https://logging.apache.org/log4j/2.x/manual/appenders.html
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</Console>
<File name="File" fileName="${sys:app.home}/app.log"
ignoreExceptions="false">
<PatternLayout
pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
</File>
</Appenders>
最佳答案
没有这样的选项。这是 FileAppender 的源代码,您可以在其中看到父文件夹的创建。如果您想避免创建文件夹,那么您可以创建自己的 FileAppender 继承者并重写 setFile 方法。
public synchronized void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize)
throws IOException {
....
FileOutputStream ostream = null;
try {
ostream = new FileOutputStream(fileName, append);
} catch(FileNotFoundException ex) {
String parentName = new File(fileName).getParent();
if (parentName != null) {
File parentDir = new File(parentName);
if(!parentDir.exists() && parentDir.mkdirs()) { //This is were parent folders are created
ostream = new FileOutputStream(fileName, append);
} else {
throw ex;
}
} else {
throw ex;
}
}
....
关于java - 如果日志文件不存在,则阻止 log4j2 创建该日志文件的父文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53974434/