点1:logging和handler的日志级别是有优先级别的,handler是在logging的基础上再取级别高的。 logging不设置(默认是warn),handler设置为info,那么最后info的日志还是输出不了,底层采用的是logging的。
点2:handler可以设置输出到控制台的StreamHandler和到文件的FileHandler。可以分别设置不同的日志级别。前提还是得在logging的级别的基础上。
点3:logging.getLogger().setLevel("DEBUG"), getLogger不传入参数的时候获取到的是root logger
root loger代码给的注释是:
A root logger is not that different to any other logger, except that it must have a logging level and there is only one instance of it in the hierarchy.
就是一单例对象,是一个跟logger。所有的logger由一单例类对象管理 Manager。
#coding:gbk
import argparse
import os
import logging
import logging.config
import sys
def test():
logger = logging.getLogger("logger")
#logging.basicConfig(filename="E:\桌面\log.txt", filemode="w", format="[%(asctime)s] [%(name)s][%(levelname)s][%(message)s]", datefmt="%d-%M-%Y %H:%M:%S", level=logging.DEBUG)
#handler1 = logging.StreamHandler()#到控制台的
stdout_handler = logging.FileHandler(filename="E:\桌面\log22.log")
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s %(message)s")
stdout_handler.setFormatter(formatter)
logger.setLevel('DEBUG')#logging默认的级别是WARN,之前没写这句,还一直查怎么自己的代码写不了日志了
#logging.getLogger().setLevel("DEBUG")#或这样
stdout_handler.setLevel(logging.WARN)#handler默认级别就是NOSET,不设置
logger.addHandler(stdout_handler)
logger.info('i am a testing')
test()
本文深入探讨Python的logging模块使用技巧,包括日志级别、handler配置及实例代码解析,帮助读者掌握日志输出控制台与文件的方法。
17万+

被折叠的 条评论
为什么被折叠?



