Запрет log4j2 от создания родительской папки файла журнала, если он не существует - PullRequest
0 голосов
/ 30 декабря 2018

Как гласит заголовок вопроса, возможно ли избежать создания родительских папок в файле журнала app4 файла file4j2, если они не существуют?На самом деле, когда я передаю несуществующую родительскую папку в лог файла 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 голосов
/ 30 декабря 2018

Нет такой опции.Вот исходный код 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;
      }
}
....
...