编辑 :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:?
答案 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"写在你的日志文件中。