Python日志本身的异常处理

Python日志本身的异常处理,python,python-3.x,exception,logging,Python,Python 3.x,Exception,Logging,当我使用logging记录异常时,我突然想到logging库本身的方法可以抛出异常 例如,如果为日志文件设置了“错误”路径,如 import logging logging.basicConfig(filename='/bad/path/foo.log') 将抛出FileNotFoundError 假设我处理这些日志记录异常的目标是保持程序运行(而不是退出,否则程序会退出)。首先想到的是 try: logging.basicConfig(filename='/bad/path/foo.

当我使用
logging
记录异常时,我突然想到
logging
库本身的方法可以抛出异常

例如,如果为日志文件设置了“错误”路径,如

import logging
logging.basicConfig(filename='/bad/path/foo.log')
将抛出
FileNotFoundError

假设我处理这些
日志记录
异常的目标是保持程序运行(而不是退出,否则程序会退出)。首先想到的是

try:
    logging.basicConfig(filename='/bad/path/foo.log')
except Exception:
    pass
但这是我们的考虑。用
try
来包装每个
日志。error
也是非常难看的,除了


处理日志记录方法(如
basicConfig()
)引发的异常,以及可能通过
debug()
error()
)等引发的异常的好模式是什么?

除非您在代码中间重新初始化记录器,为什么不在记录器初始化期间检查文件是否存在:

import os

if os.path.isfile(filename):

    # Initialise the logger 

这应该可以正常工作,当然,除非后面的代码的某些部分试图删除该文件,但我希望不是这样。

您给出的示例是一个错误配置的日志模块。为什么不正确配置它?@rdas就像运行时bug一样,正确配置并不总是像这个示例那样简单。如果存在多个部署环境(例如,暂存、生产、colos、Docker、AWS等),这将变得更具挑战性。这是您的问题,还是您有其他想法?配置问题应该通过正确的配置而不是代码来解决。依我看,如果存在配置问题,例如我犯了一个错误,我想知道它,而不是让应用程序默默地忽略它。不,我想你完全没有领会我的意思。如果您认为您的记录器是“每一件小事”,那么您可以将记录器包装在一个对象中,并使用它来处理抛出的异常。就我个人而言,我不会那样做。只需正确配置记录器。如果同样的问题在其他地方出现(而不是在日志记录程序中),请重新评估并根据具体情况进行处理。我认为,这个想法可以用于解决特定错误。下一步是考虑如果文件不存在该怎么办。是否应该配置一些其他记录器,以使散布在整个代码库中的日志记录方法具有预期的行为?另外,
logging
是否也可能引发其他异常?@flow2k,我想您需要查看doc以了解这一点。日志模块很可能会抛出很多可能的异常。您也可以在开头使用
assert
,而不是
if
子句。这样,如果文件不存在,程序将在一开始就抛出
AssertionError
,而不会浪费时间运行其他代码。