Как создать каталоги для файлов Logger через FileHandler

Я пытаюсь создать журналы в каталогах, где каждый каталог создается днем, но fileHandler не создает каталоги, а создает исключение. Не удалось получить блокировку для C: \ dir_date \ Logging.txt (здесь dir_date нет, и я пытаюсь создать лог в этот каталог). Могу ли я создавать каталоги через "fileHandler"?

FileHandler fileTxt;
fileTxt = new FileHandler("C:\\ff\\Logging.txt");

log4J может создавать даже каталоги, если их нет, разве это не возможно с помощью fileHandler?

1 ответ

Решение

JulFileHandler не может создавать каталоги. В соответствии со спецификацией API несуществующие каталоги считаются и должны рассматриваться как недействительные. Это означает, что ваши журналы должны отображаться в домашнем каталоге пользователя. Это описано в JDK-6244047: невозможно указать каталоги для ведения журнала FileHandler, если они не существуют:

Конфигурация: по умолчанию каждый FileHandler инициализируется с использованием следующих свойств конфигурации LogManager. Если свойства не определены (или имеют недопустимые значения), то используются указанные значения по умолчанию.

  • java.util.logging.FileHandler.level указывает уровень по умолчанию для обработчика (по умолчанию Level.ALL).

<snip>

  • java.util.logging.FileHandler.pattern указывает шаблон для создания имени выходного файла. Смотрите ниже для деталей. (По умолчанию "%h/java%u.log").

Исходя из приведенной выше спецификации, если свойство FileHandler.pattern указывает неиспользуемое значение, оно недопустимо. Если указано недопустимое значение, то API должен использовать значение по умолчанию. В этом случае следует использовать "% h / java% u.log".

Если вам нужно создать каталоги, вы можете использовать опцию конфигурации LogManager или создать подкласс FileHandler.

См. Также: JDK-6258319: Нет исключения с файлом FileHandler:%h, но% h не существует

Другие вопросы по тегам