我想在我的应用程序中使用python的日志框架,我想允许我的应用程序的最终用户指定日志文件.(通过Python日志框架的配置机制,在我的例子中是YAML文件的一部分,最终用户可以编辑该文件以指定日志记录的行为方式.)
有没有办法通过创建它来获取日志框架以确保目录存在?因为日志文件名的确切路径嵌入在最终用户指定的配置信息中,所以作为应用程序编写者解析此信息以确定应创建哪个目录对我来说非常重要.
如果最终用户指定"foo/bar/baz.log",我想确保创建了foo/bar目录.
注意:这是关于Java日志记录的这个SO问题的Python等价物.
初始化期间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)