如何为python logging
记录器编写一个自定义处理程序,该记录器将捕获由于突然无法将日志记录信息写入文件并将错误重新引发为另一种类型而导致的IOError
?
我正在阅读和转换大型原始数据存储库,记录流程(python logging
模块)对我来说非常重要。如果由于某些错误而导致记录失败,例如IOError
,我希望应用程序优雅地退出。在周末,我编写日志文件的网络位置崩溃,转换过程继续游戏。
我的代码中的其他组件可能会抛出IOError
(例如,在给定时间内转换的原始文件不存在,表明检测器在给定的时间段内已关闭)并不重要并且可以忽略。我发现了这些错误并继续下一小时的数据。
如果记录器抛出了不同的自定义异常,我可以单独处理它。像(免责声明:这不起作用):
class WarningFileHandler(logging.FileHandler):
"""File handler for only writing WARNING log information to disk"""
def __init__(self,filename,mode='a',encoding=None,delay=False):
logging.FileHandler.__init__(self, filename, mode, encoding, delay)
def emit(self, record):
# Filter out all record objects that are not at the logging.WARNING level.
if not record.levelno == logging.WARNING:
return
try:
logging.FileHandler.emit(self, record)
except IOError as e:
# The logger cannot write successfully to disk (e.g. a network
# resource becomes unavailable).
raise LoggerIOError("[ERROR NO {0}: {1}]. Logger write "
"failure.".format(e.errno,e.strerror))
LoggerIOError
是一个简单的自定义异常。
class LoggerIOError(Exception):
"""Logger IOError"""
pass
任何人都可以提供一些帮助或建议吗?我对logging
模块没有多少经验,所以我可能会忽略一些简单的事情。
logging.raiseExceptions
的默认值应为True
。
OS / Python详细信息:
谢谢!
答案 0 :(得分:3)
异常由处理程序的handleError
方法处理,记录为here。子类化相关处理程序以实现自定义错误处理。从{exception}子句调用handleError
方法,因此sys.exc_info()
应返回当前异常。