我试图让Python记录内容,尽管已阅读了logging docs和how-to,但我并不了解其行为。
我设置了全局日志级别,然后尝试记录一些内容:
logger = logging.getLogger()
print("Initially should be warn: %d" % logger.getEffectiveLevel())
logger.setLevel(logging.DEBUG)
print("Logger level: %d" % logger.getEffectiveLevel())
logger.info("Maybe I am printed?")
但是运行python my_script.py
只是打印:
Initially should be warn: 30
Logger level: 10
但是,如果我添加一行logging.info
来电,例如,
logger = logging.getLogger()
print("Initially should be warn: %d" % logger.getEffectiveLevel())
logger.setLevel(logging.DEBUG)
print("Logger level: %d" % logger.getEffectiveLevel())
logging.info("I am printed")
logger.info("Maybe I am printed?")
然后记录全部显示:
Initially should be warn: 30
Logger level: 10
INFO:root:I am printed
INFO:root:Maybe I am printed?
logging.info
在做什么?
答案 0 :(得分:2)
对logging.info
的调用是配置日志处理程序和格式化程序,以便它可以输出日志。如果您想自己动手,以下代码将对其进行设置:
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("boo")
有关配置日志记录的详细信息,请参阅本教程的configuring logging部分。
logging.info
中提供了request.query_params.get('field')
调用设置日志记录的代码。如果不存在处理程序,它基本上只创建处理程序。
答案 1 :(得分:2)
第一个示例实际上会警告您无法找到记录器" root" (see here)。这是因为,正如建议的那样,您没有为logger
定义任何处理程序。
以下是logging.info
的实施:
def info(msg, *args, **kwargs):
"""
Log a message with severity 'INFO' on the root logger.
"""
if len(root.handlers) == 0:
basicConfig()
root.info(msg, *args, **kwargs)
正如您所看到的,当没有找到处理程序时,它将调用basicConfig
,它还将初始化一个默认处理程序,从而修复以下语句中的日志记录。