首页 > 解决方案 > 如果 log4j2 不存在,则阻止 log4j2 创建日志文件的父文件夹

问题描述

正如问题的标题所述,如果它们不存在,是否可以避免创建 log4j2 File appender 日志文件的父文件夹?实际上,当我传递文件 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>

标签: javalog4j2

解决方案


没有这样的选择。这是 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;
      }
}
....

推荐阅读