地税城市维护建设税网站是什么,国际域名注册查询,平台合同模板,天河做网站企业一些日志记录的简单记录#xff1a; 用basicConfig可以进行配置 注意日志的等级#xff1a; 上述代码得到的日志如下#xff08;最基础的日志#xff09;#xff1a; 关于记录下来的日志格式可以有很多内容#xff1a;如等级、发生的时间、发生的位置、发生的进程、…一些日志记录的简单记录 用basicConfig可以进行配置 注意日志的等级 上述代码得到的日志如下最基础的日志 关于记录下来的日志格式可以有很多内容如等级、发生的时间、发生的位置、发生的进程、发生的线程、发生的调用栈等当日志进行格式化时可以支持占位符 示例
日志处理方式
默认情况下输出到标准错误stderr中为了和print使用的标准输出stdout区分开来pycharm会将日志显示为红色。 如果现在需要 1.输出到指定的流比如stdout中则通过stream参数指定输出目标
2.输出到指定的文件通过filename filemode encoding errors参数指定文件的打开方式
filemode默认值是a 即append 附加errors默认值是加斜杠转义 注意不能和输出到流共同使用
日志记录流程 先去检查日志的等级达到等级才去创建日志记录对象判断日志是否会被拒绝被过滤不被拒绝记录再交给日志的处理器处理器再次判断等级是否达到处理等级判断是否会被过滤ok再进行处理格式化回到主流程判断是否要交给父处理器再进行循环
日志记录器 1 提供方法供程序创建日志 2 通过等级、过滤器来筛选要处理的日志 3 把要处理的日志交给日志处理器进行处理 默认是root记录器就是在上述第一次运行日志脚本时看到的root 虽然有默认的但是我们会创建自己的日志记录器让不同的日志记录器有自己的执行模式
import logginglogging.basicConfig()logger_root logging.getLogger()
logger_a logging.getLogger(a)
logger_b logging.getLogger(b)logger_root.warning(1111)
logger_a.warning(2222)
得到的结果
如果在项目中用不同的记录器就可以记录更加清晰的内容 代码示例
import logginglogging.basicConfig(levellogging.INFO, filenametest.log, filemodew, encodingutf-8
)
logger_code logging.getLogger(code) # 业务代码
logger_test logging.getLogger(test) # 测试代码def add(a, b):logger_code.info(f收到参数:{a}, {b})c a blogger_code.info(f计算结果:{c})return cdef test_add():a 1for b in range(5):logger_test.info(f收到的参数为{a},{b})c add(a, b)_c a blogger_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首先尝试获取如果不存在就会创建如果存在则直接返回
日志处理器有等级判断 可以选择将日志内容发送保存到指定地方比如输出到TCP输出到多个文件中等只需要通过logger.addHandler(……)添加处理器将创建好的处理器添加给指定“记录器”或者在basicConfig中配置
处理器也是设置等级通过处理器的差异化设置使得不同级别的日志会按照不同的方式进行处理 logger.addHandler(……)添加处理器
日志格式的配置
formatter logging.Formatter(),将设置好的格式给处理器hander.setFormatter(formatter)因为记得我们最开始的流程图是处理器在最后才会用到格式化。注意一个处理器只能有一个格式。
集中式配置
基于代码的配置可维护性可读性都不够好我们用基于文件的配置将配置信息和代码进行分离。 logging模块支持基于文件的配置如ini格式也支持基于字典的模式字典数据可以保存为各种文件格式如json、yaml、csv、mysql
import logging.configconfig {}logging.config.dictConfig(config)写好config文件之后可以通过import json来对config进行json文件的转换 字典转换成yaml也是同理记得先pip install pyyamyaml.safe_dump(config, f); json转换为字典loads
yaml转为字典