防止log4j2创建日志文件的父文件夹(如果不存在)

时间:2018-12-30 00:38:45

标签: java log4j2

作为问题的标题,是否可以避免创建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>

1 个答案:

答案 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;
      }
}
....