赞
踩
一些日志记录的简单记录:
用basicConfig
可以进行配置
注意日志的等级:
上述代码得到的日志如下(最基础的日志):
关于记录下来的日志格式可以有很多内容:如等级、发生的时间、发生的位置、发生的进程、发生的线程、发生的调用栈等,当日志进行格式化时,可以支持占位符
示例:
默认情况下:输出到标准错误stderr中,为了和print使用的标准输出stdout区分开来,pycharm会将日志显示为红色。
如果现在需要:
1.输出到指定的流,比如stdout
中,则通过stream
参数指定输出目标
2.输出到指定的文件,通过filename filemode encoding errors
参数指定文件的打开方式
filemode
默认值是a
即append 附加,errors
默认值是加斜杠转义
注意,不能和输出到流共同使用
先去检查日志的等级,达到等级才去创建日志记录对象,判断日志是否会被拒绝被过滤,不被拒绝(记录),再交给日志的处理器,处理器再次判断等级(是否达到处理等级),判断是否会被过滤,ok再进行处理(格式化),回到主流程判断是否要交给父处理器再进行循环
root
import logging
logging.basicConfig()
logger_root = logging.getLogger()
logger_a = logging.getLogger("a")
logger_b = logging.getLogger("b")
logger_root.warning("1111")
logger_a.warning("2222")
得到的结果:
如果在项目中,用不同的记录器就可以记录更加清晰的内容
代码示例:
import logging logging.basicConfig( level=logging.INFO, filename="test.log", filemode="w", encoding="utf-8" ) logger_code = logging.getLogger("code") # 业务代码 logger_test = logging.getLogger("test") # 测试代码 def add(a, b): logger_code.info(f"收到参数:{a=}, {b=}") c = a + b logger_code.info(f"计算结果:{c=}") return c def test_add(): a = 1 for b in range(5): logger_test.info(f"收到的参数为:{a=},{b=}") c = add(a, b) _c = a + b logger_test.info(f"预期结果为:{_c=}, 实际结果为:{c=}") if c == _c: logger_test.warning("测试通过") else: logger_test.warning("测试失败") if __name__ == "__main__": test_add()
结果为:
这样就方便后期再次操作,如在命令行中打开,通过grep进行筛选
当然也可以在配置中就进行筛选,可以配置logger
常用的配置选项:等级、过滤器、处理方法
如logger_test.setLevel(logging.DEBUG)
当在多个模块中使用logging时要注意,当记录器前缀相同时有父记录器子记录器的关系,子处理器的等级会和父记录器保持一致
注意python中可以通过
logging.getLogger(__name__)#为本模块创建记录器
而且即便在不同的文件中,get同一个名字的logger,得到的就是同一个logger
getLogger首先尝试获取,如果不存在就会创建,如果存在则直接返回
logger.addHandler(……)
添加处理器,将创建好的处理器添加给指定“记录器”,或者在basicConfig
中配置处理器也是设置等级,通过处理器的差异化设置,使得不同级别的日志会按照不同的方式进行处理
logger.addHandler(……)
添加处理器
formatter = logging.Formatter()
,将设置好的格式给处理器hander.setFormatter(formatter)
,因为记得我们最开始的流程图,是处理器在最后才会用到格式化。注意,一个处理器只能有一个格式。
基于代码的配置可维护性可读性都不够好,我们用基于文件的配置,将配置信息和代码进行分离。
logging模块支持基于文件的配置,如ini格式,也支持基于字典的模式,字典数据可以保存为各种文件格式,如json、yaml、csv、mysql
import logging.config
config = {}
logging.config.dictConfig(config)
写好config文件之后,可以通过import json
来对config进行json文件的转换
字典转换成yaml也是同理,记得先pip install pyyamyaml.safe_dump(config, f);
json转换为字典:loads
yaml转为字典:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。