当前位置: 首页 > 知识库问答 >
问题:

如果日志文件不存在,则阻止log4j2创建日志文件的父文件夹

柯唯
2023-03-14

正如问题的标题所述,如果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>

共有1个答案

牛经赋
2023-03-14

没有这样的选择。下面是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;
      }
}
....
 类似资料:
  • 我正在使用带有log4j2的Spring Boot1.5.9,当我测试日志记录功能时,创建了日志文件,但没有将日志写入其中,而控制台日志记录程序运行良好。请在pom.xml&log4j2.properties配置下面找到。 log4j2.properties文件:

  • 我有将日志保存到文件配置,但日志会附加到现有内容。我想创建总是新的文件。我怎么能那样做? 我的log4j2.xml:

  • 我想设置日志级别、文件名和日志文件的文件路径。我找到了一种方法来实现这一点,除了log4j创建一个附加的日志文件外,其他方法都可以实现。我得到了下面的log4j2。xml: 在我的主函数中,我设置了${sys:logDir}和${sys:logFilename}: 它像我想要的那样工作,但是log4j在我的主项目路径中创建了一个名为“${sys:logDir}${sys:logFilename}”

  • 我已经将log4j2.properties文件与springboot应用程序一起使用。正在创建日志文件,但日志未写入该文件。 日志出现在控制台,但没有写入文件,因为我没有得到问题。 奇怪的是,父包记录器“logger Enabled:Enting main\n\n”被写入文件,而另一个父包记录器“****演示应用程序启动*****”没有被写入文件,如上面的代码所示。并且还检查了子包,即记录器,甚至

  • 问题内容: 我当前正在创建一个可以包含模块的系统(将它们视为插件),其中每个模块可以拥有自己的专用日志。 我想使用log4j2项目进行日志记录,但是文件附加器似乎有些麻烦。 主项目(整个模块的模块加载器和“核心”)应具有自己的日志文件,而模块应具有自己的日志文件(如)。 通过阅读有关追加程序的文档,我发现了该类,并且我将使用它。直到我发现不能简单地将追加器添加到由创建的默认记录器中。 LogMan

  • 我希望由log4j2创建的日志文件在其文件名中包含日期模式,包括当前活动文件。也就是说,如果今天的日期是2016-12-15,我希望当前日志文件是lager-2016-12-15.log。当日期改变时,我希望创建一个名为lager-2016-12-16.log的新文件。 使用,我无法使当前活动日志文件的文件名中具有日期模式。我的log4j2.xml: 使用此配置,翻转时的复制被搞乱了。从fileN