当前位置:   article > 正文

python学习2:日志记录的用法_python日志

python日志

一些日志记录的简单记录:
在这里插入图片描述
basicConfig可以进行配置
注意日志的等级:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述代码得到的日志如下(最基础的日志):
在这里插入图片描述
关于记录下来的日志格式可以有很多内容:如等级、发生的时间、发生的位置、发生的进程、发生的线程、发生的调用栈等,当日志进行格式化时,可以支持占位符
示例:
在这里插入图片描述

日志处理方式:

默认情况下:输出到标准错误stderr中,为了和print使用的标准输出stdout区分开来,pycharm会将日志显示为红色。
如果现在需要:
1.输出到指定的流,比如stdout中,则通过stream参数指定输出目标
在这里插入图片描述

2.输出到指定的文件,通过filename filemode encoding errors参数指定文件的打开方式

filemode默认值是a 即append 附加,errors默认值是加斜杠转义
注意,不能和输出到流共同使用
在这里插入图片描述

日志记录流程

在这里插入图片描述
先去检查日志的等级,达到等级才去创建日志记录对象,判断日志是否会被拒绝被过滤,不被拒绝(记录),再交给日志的处理器,处理器再次判断等级(是否达到处理等级),判断是否会被过滤,ok再进行处理(格式化),回到主流程判断是否要交给父处理器再进行循环

  • 日志记录器
    1 提供方法,供程序创建日志
    2 通过等级、过滤器来筛选要处理的日志
    3 把要处理的日志交给日志处理器进行处理
    默认是root记录器,就是在上述第一次运行日志脚本时看到的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")

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

得到的结果:
在这里插入图片描述

如果在项目中,用不同的记录器就可以记录更加清晰的内容
代码示例:

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()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

结果为:
在这里插入图片描述

这样就方便后期再次操作,如在命令行中打开,通过grep进行筛选
通过

当然也可以在配置中就进行筛选,可以配置logger
常用的配置选项:等级、过滤器、处理方法
logger_test.setLevel(logging.DEBUG)

当在多个模块中使用logging时要注意,当记录器前缀相同时有父记录器子记录器的关系,子处理器的等级会和父记录器保持一致

注意python中可以通过

logging.getLogger(__name__)#为本模块创建记录器
  • 1

而且即便在不同的文件中,get同一个名字的logger,得到的就是同一个logger
getLogger首先尝试获取,如果不存在就会创建,如果存在则直接返回

  • 日志处理器(有等级判断)
    在这里插入图片描述
    可以选择将日志内容发送(保存)到指定地方,比如输出到TCP,输出到多个文件中等,只需要通过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)
  • 1
  • 2
  • 3
  • 4
  • 5

在这里插入图片描述
写好config文件之后,可以通过import json来对config进行json文件的转换
在这里插入图片描述
字典转换成yaml也是同理,记得先pip install pyyamyaml.safe_dump(config, f);

在这里插入图片描述

json转换为字典:loads
在这里插入图片描述

yaml转为字典:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/861334
推荐阅读
相关标签
  

闽ICP备14008679号