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

ako*_*ozi 3 python error-handling logging

编辑::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)
Run Code Online (Sandbox Code Playgroud)

输出看起来像:

__main__-ERROR:root:It was a good attempt though
Run Code Online (Sandbox Code Playgroud)

我想了解的是为什么它显示为 :root:,如果有任何方法可以使用 :FailedToDoSimpleTaskError: 显示它?

Ced*_*olo 5

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

root出现在您的消息中的原因在日志记录文档下进行了解释。在该文档中,您可以找到有关更改显示消息格式的信息

由于您确实使用了,因此logging.error(err)您没有调用loggerwhich 指定了您想要的格式。于是就root出现了这个词。

您还应该注意到,在使用时,logging.error(err)您会在控制台上收到消息,而不是将其添加到日志文件中。如果您尝试使用,logging.info则不会将任何消息写入控制台,因为默认日志级别WARNING和您INFOHANDLER命名的logger. 因此,如果您尝试,例如logging.info("Info test"),日志控制台和日志文件中都不会出现任何内容。但是,使用logger.info("Info test")您会在日志文件中收到消息“信息测试”。