【发布时间】:2011-05-30 14:28:14
【问题描述】:
我为它定义了根记录器和处理程序:
_root = logging.getLogger()
_sh = logging.StreamHandler()
_fh = logging.FileHandler('./error.log', delay = True)
_root.addHandler(_sh)
_root.addHandler(_fh)
和模块记录器实例:
_log = logging.getLogger("Main")
# In other file
_log = logging.getLogger("Configuration")
现在我在 try..except 块中调用_log.exception:
_log.exception("Test")
现在我在控制台和文件中获得回溯。我尝试使用控制台处理程序抑制 exc_info 的打印,但不使用文件处理程序:
class _TraceBackFilter(logging.Filter):
def filter(self, rec):
rec.exc_info = None
return True
_sh = logging.StreamHandler()
_sh.addFilter(_TraceBackFilter())
_root.addHandler(_sh)
这适用于文件和控制台处理程序,所有处理程序的回溯已完全删除,但我只需要控制台。有什么方法可以只为控制台处理程序而不是文件处理程序抑制 exc_info?
编辑:
我修改_TraceBackFilter类。
class _TraceBackFilter(logging.Filter):
def filter(self, rec):
if rec.exc_info:
logging.getLogger(rec.name).log(rec.levelno, rec.getMessage())
return False
else:
return True
现在它适用于控制台处理程序,但在文件中我将消息加倍,一个有回溯,一个没有回溯。
【问题讨论】: