如果禁用记录器,则防止创建空日志文件

sar*_*jit 4 python logging

我正在使用日志记录模块使用以下代码在单独的日志文件中写入错误和调试消息。但是我希望只有在设置了特定的环境变量时才应该进行日志记录。在下面的代码中,我通过设置关闭了日志记录logger.disabled=True。但是,我观察到当我的应用程序完成执行时,会出现空日志文件。我在设置logger.disabled=True语句之后添加了一个检查以删除这些文件,但它说文件不存在。这些文件是什么时候生成的——在脚本执行结束时,即使记录器被禁用,是否可以防止写入空文件?

class LevelFilter(logging.Filter):
    def __init__(self, level):
        self.level = level
    def filter(self, record):
        return record.levelno == self.level

logger = logging.getLogger("exceptionsLogger")
debugLogFileHandler = logging.FileHandler("Debug.log", mode='w')
errorLogFileHandler = logging.FileHandler("Error.Log", mode='w')
formatter = logging.Formatter('%(message)s')
errorLogFileHandler.setFormatter(formatter)
debugLogFileHandler.setFormatter(formatter)
logger.addHandler(debugLogFileHandler)
logger.addHandler(errorLogFileHandler)
debugLogFileHandler.addFilter(LevelFilter(logging.DEBUG))
errorLogFileHandler.addFilter(LevelFilter(logging.ERROR))

logger.setLevel(logging.DEBUG)
logger.disabled = True
Run Code Online (Sandbox Code Playgroud)

per*_*sid 5

参见logging/__init__.pyPython 标准库。有FileHandler一个有方法的类__init__()

FileHandler.__init__有参数delay使处理程序延迟创建实际StreamHandler直到第一条消息发出。您不使用此参数,并open()在实例化实例时以“w”模式调用FileHandler。在将 logger.disabled 设置为 True 之前执行此操作。

因此,如果您稍后不发出消息,您仍然已经打开了空文件。

为避免这种情况,要么创建带有参数延迟传递 True 的文件处理程序,要么仅在需要时实例化和分配处理程序。logger.disabled不会帮助您避免创建文件。