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

Jas*_*n S 20 python logging

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

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

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

注意:这是关于Java日志记录这个SO问题的Python等价物.

unu*_*tbu 25

初始化期间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)
Run Code Online (Sandbox Code Playgroud)

  • 哦,如果你使用Python 3.2+,你不需要花哨的`mkdir_p`; 只需使用``os.makedirs``(http://docs.python.org/3/library/os.html#os.makedirs)和`exist_ok = True`. (5认同)