我正在一个大的 python 模块(Python 2.6.6)中工作,并在数千个地方进行日志记录,并且我正在使用 python 的记录器模块。
现在,我想忽略日志记录期间生成的异常。
可能的基本场景之一是
import glob
import logging
import logging.handlers
LOG_FILENAME = '/home/abc/logging_rotatingfile_example.out'
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)
# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=20, backupCount=5)
my_logger.addHandler(handler)
# Log some messages
for i in range(20):
my_logger.debug('i = %d' % i)
现在假设,在my_logger.debug('i = %d' % i)
一些如何从系统中删除文件或更改权限以及记录器由于磁盘故障、磁盘已满等而无法在日志文件上记录并在屏幕上生成异常。
它是分布式系统,n个进程正在使用记录器模块。请注意,进程不应因日志记录异常(由于磁盘故障、磁盘已满等)而中止。
所以我希望忽略该异常。
笔记:
现在我知道在 python 记录器上创建包装类并使用 try- except 作为记录器函数的方法之一。
但我有不同的要求,我不想使用这种方式,所以,有没有其他方法可以做到这一点,或者 python 记录器的任何属性对我的情况有用?
您不需要忽略异常,因为logging
module 已经帮你处理好这些了.
所有文件操作(日志发送、旋转等)都受到保护try..except Exception
块。如果出现异常情况,logging.Handler.handeError() method将把异常写入sys.stderr
反而。您可以设置logging.raiseExceptions
to False
使这些静音:
import logging
logging.raiseExceptions = False
引用文档:
当在执行期间遇到异常时,应从处理程序调用此方法emit()
称呼。如果模块级属性raiseExceptions
is False
,异常会被默默地忽略。这是日志系统最想要的 - 大多数用户不会关心日志系统中的错误,他们对应用程序错误更感兴趣。但是,如果您愿意,您可以将其替换为自定义处理程序。指定的记录是发生异常时正在处理的记录。 (默认值为raiseExceptions
is True
,因为这在开发过程中更有用)。
如果您传递给的文件名RotatingFileHandler
无法创建,那么在日志记录期间不会发生引发的异常,但是,它会在创建处理程序时发生。您要么必须立即处理该异常,要么设置delay=True
创建处理程序以推迟打开文件直到记录时间:
handler = logging.handlers.RotatingFileHandler(
LOG_FILENAME, maxBytes=20, backupCount=5, delay=True)
您使用的内容取决于您是否看到提供了错误的路径LOG_FILENAME
此时是否存在应用程序错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)