如果记录器有文件处理程序,则只创建日志目录

Only create logs' directory if logger has file handler

Python 的记录器库将创建日志文件,如果它不存在但不存在任何父目录。

无论记录器是否配置为使用 FileHandler.

,我们的代码都会创建父目录

我们现在 运行 在 docker 中,仅使用控制台输出,并且希望避免在未安装文件处理程序的情况下创建目录。

有没有办法检测这个配置?

dictConfig() documentation 展示了如何配置特定类型的处理程序,并且可以将其扩展到您自己的处理程序。

您可以像这样子class FileHandler 并覆盖 emit() 方法:

def emit(self, record):
    dn = os.path.dirname(self.baseFilename)
    if not os.path.exists(dn):
        os.makedirs(dn)
    super().emit(record)

然后在您的日志记录配置中使用此子class。但是,请确保使用 delay=True 实例化处理程序,如果您在自定义处理程序中覆盖 __init__(),请从那里调用父级 class' __init__()delay=True 在实际需要写入文件之前不会尝试打开文件;这是通过 FileHandler.emit() 方法完成的,通过在调用基本 class 方法之前在重写方法中创建目录' emit() ,您将仅在需要时创建目录,而不是'已经不存在了。