Ведение журнала python: как создать каталог журнала?
Я хотел бы использовать фреймворк python в своем приложении, и я хотел бы разрешить конечному пользователю моего приложения указать файл журнала. (Через структуру ведения журнала Python механизмы настройки, которые в моем случае являются разделом файла YAML, который конечный пользователь может редактировать, чтобы указать, как ведет себя журнал.)
Есть ли способ получить структуру ведения журнала, чтобы обеспечить существование каталога путем ее создания?. Поскольку точный путь к имени файла журнала встроен в информацию о конфигурации, указанную конечным пользователем, является нетривиальным для меня как писателя приложения для анализа этой информации, чтобы определить, какая директория должна быть создана.
Если конечный пользователь указывает "foo/bar/baz.log", я хотел бы убедиться, что создан каталог foo/bar.
Примечание. Это эквивалент Python этого вопроса SO о регистрации Java.
Ответы
Ответ 1
Подкласс FileHandler
(или любой другой обработчик, который вы используете) для вызова mkdir_p
во время инициализации:
import logging
import os
import errno
def mkdir_p(path):
"""http://stackoverflow.com/a/600612/190597 (tzot)"""
try:
os.makedirs(path, exist_ok=True) # Python>3.2
except TypeError:
try:
os.makedirs(path)
except OSError as exc: # Python >2.5
if exc.errno == errno.EEXIST and os.path.isdir(path):
pass
else: raise
class MakeFileHandler(logging.FileHandler):
def __init__(self, filename, mode='a', encoding=None, delay=0):
mkdir_p(os.path.dirname(filename))
logging.FileHandler.__init__(self, filename, mode, encoding, delay)