是的,我看到python doc说:“记录器从未直接实例化,而是始终通过模块级函数logging.getLogger(name)进行实例化”,但是我有一个调试问题,并且想知道根本原因。
这是示例:
#!/usr/bin/python
import logging
logger = logging.getLogger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.info("test")
Run Code Online (Sandbox Code Playgroud)
在此处使用logging.getLogger(“ test”),将不会打印日志消息。
如果我将logging.getLogger(“ test”)更改为logging.Logger(“ test”),则将打印日志消息。
#!/usr/bin/python
import logging
logger = logging.Logger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.info("test")
Run Code Online (Sandbox Code Playgroud)
或者,我们可以使用logging.getLogger(“ test”)并将记录器级别设置为logging.DEBUG。
#!/usr/bin/python
import logging
logger = logging.getLogger("test")
format = "%(asctime)s [%(levelname)-8s] %(message)s"
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(format, datefmt="%Y-%m-%d %H:%M:%S"))
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
logger.info("test")
Run Code Online (Sandbox Code Playgroud)
该方法.getLogger("test")
正在查找该名称的任何现有记录器配置"test"
,同时.Logger("test")
创建具有该名称的默认记录器"test"
并将默认日志级别设置为 0。如果该getLogger
方法找不到该名称的记录器类,那么它将创建一个基本的记录器类。记录器的有效级别为 30 ( https://docs.python.org/3/library/logging.html#logging-levels ),它将忽略您的 DEBUG 消息。您可以通过检查logger.getEffectiveLevel()
来注意到差异。
理想情况下,您将创建记录器并根据正确的命名/配置来设置它们,而不是接受默认配置。
归档时间: |
|
查看次数: |
2334 次 |
最近记录: |