python日志:如何确保创建日志文件目录?

时间:2013-12-18 19:29:25

标签: python logging

我想在我的应用程序中使用python的日志框架,我想允许我的应用程序的最终用户指定日志文件。 (通过Python日志框架的configuration mechanisms,在我的例子中是YAML文件的一部分,最终用户可以编辑该文件以指定日志记录的行为方式。)

有没有办法让日志框架通过创建来确保目录存在?因为日志文件名的确切路径嵌入在最终用户指定的配置信息中,所以对于我来说,作为应用程序编写者来解析这些信息以确定应该创建哪个目录是非常重要的。

如果最终用户指定“foo / bar / baz.log”,我想确保创建了foo / bar目录。

注意:这是Python的等同于this SO question about Java logging

1 个答案:

答案 0 :(得分:23)

在初始化期间调用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)