为什么在python中记录自定义错误显示为root?

时间:2018-03-15 14:55:48

标签: python logging error-handling

编辑 :root:出现的原因是因为我输入了logging.error(...)而不是logger.error。这导致程序默认为处理程序根目录。这改变了包含处理程序名称的一般格式。更正记录器并将错误名称添加到消息中似乎可以创建正确的输出。

旧文字

使用日志包我正在尝试记录自定义错误。这样做时会显示错误消息,但自定义错误异常似乎显示为root。例如,下面显示的是python 3.6.6

上运行的简单案例

输入看起来像:

 import logging
 import logging.config

 logger = logging.getLogger(__name__)
 logger.setLevel(logging.INFO)
 HANDLER = logging.FileHandler('test.txt')
 logger.addHandler(HANDLER)
 FORMATTER = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
 HANDLER.setFormatter(FORMATTER)

 class FailedToDoSimpleTaskError(Exception):
     pass

 def fail_todo_thing():
     raise FailedToDoSimpleTaskError('It was a good attempt though')

 try:
     fail_todo_thing()
 except FailedToDoSimpleTaskError as err:
     logging.error(err)

输出如下:

__main__-ERROR:root:It was a good attempt though

我想要了解的是它出现的原因:root:,如果有任何方法可以让它显示出来:FailedToDoSimpleTaskError:?

1 个答案:

答案 0 :(得分:3)

正如您在编辑中所述,如果您使用logging.error(err)更正logger.error(err),则会获得正确的输出__main__ - ERROR - It was a good attempt though

logging documentation下解释了root出现在您的邮件中的原因。在该文档中,您可以找到有关changing the format of displayed messages

的信息

由于您确实使用了logging.error(err),因此您没有调用已指定所需格式的logger。因此出现root字。

您应该也注意到,在使用logging.error(err)时,您将在控制台上收到消息,而不是添加到您的日志文件中。如果您尝试使用logging.info,则不会向控制台写入任何消息,因为默认日志级别为WARNING,而您设置为INFO的级别为{{1}名为HANDLER的。因此,如果您尝试示例logger,则日志控制台和日志文件中都不会显示任何内容。但是,使用logging.info("Info test"),您将收到消息" Info test"写在你的日志文件中。