作为问题的标题,是否可以避免创建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>
答案 0 :(得分:0)
没有这样的选择。这是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;
}
}
....