• python之logging日志


    一、logging介绍:

    使用 logging.debug(text)来打印信息,info等的使用方法与debug一致,都只有一个位置参数

    默认日志界别为:会输出warning以上的信息,代码示例:

    import logging
    
    logging.debug("这是一个debug的信息")
    logging.info("这是一个info的信息")
    logging.warning("这是一个warning的信息")
    logging.error("这是一个error的信息")
    logging.critical("这是一个critical的信息")

    查看日志返回:

     

    二.日志的级别:

    从低到高分别是:

    debug(调试)-》info(打印信息,类似print) -》waring(警告信息)-》 error(错误)-》 critical(致命)

     

    三.日志收集器

    可实现自定义打印日志

    主要功能:

    1.自定义一个日志收集器(getLogger函数),

    可自定义名称,否则默认返回 root logger

    代码:my_logger = logging.getLogger('bktest')

    2.设置级别(setLevel函数)

    可以设置日志的收集级别,否则默认使用wainning日志

    3.指定输出渠道

    ch = logging.StreamHandler()

    4.设置输出级别

    my_logger.setLevel('DEBUG')

    5.对接,添加渠道

    my_logger.addHandler(ch)

    当收集日志的级别与输出日志的级别不一致时,最终输出结果是两个级别的交集,代码示例:

    import logging
    
    my_logging = logging.getLogger('bktest')#创建日志收集器
    my_logging.setLevel('DEBUG')#设置日志收集级别
    ch =logging.StreamHandler()#输出到控制台
    my_logging.setLevel('INFO')#设置日志输出级别
    my_logging.addHandler(ch)#对接,添加渠道
    
    my_logging.debug("这是一个debug的信息")
    my_logging.info("这是一个info的信息")
    my_logging.warning("这是一个warning的信息")
    my_logging.error("这是一个error的信息")
    my_logging.critical("这是一个critical的信息")

    查看输出结果:

     四.优化日志信息

    常用格式化呼输出语句:

    %(name)s logger(日志收集器)的名字
    %(levelname)s 文本形式的日志级别
    %(leveIno)s 数字形式的日志级别
    %(pathname)s 调用日志输出函数的模块的完整路径名
    %(filename)s 调用日志输出函数的模块的文件名
    %(module)s 调用日志输出函数的模块名
    %(funName)s 调用日志输出函数的函数名
    %(lineno)d 调用日志输出函数的语句所在的代码行
    %(created)f 当前时间,用UNIX标准的表示时间的浮点数表示
    %(relativeCreated)d 输出日志信息时,自logger创建依赖的毫秒数
    %(asctime)s 字符串形式的当前时间,默认格式是"2022-05-27 00:10:00,000"。逗号后面是毫秒
    %(thread)d 线程ID,可能没有
    %(threadName)s 线程名,可能没有
    %(process)d 进程ID,可能没有
    %(message)s 用户输出的消息

    代码如下:

    import logging
    
    my_logging = logging.getLogger('bktest')#创建日志收集器
    my_logging.setLevel('DEBUG')#设置日志收集级别
    ch =logging.StreamHandler()#输出到控制台
    my_logging.setLevel('INFO')#设置日志输出级别
    my_logging.addHandler(ch)#对接,添加渠道
    
    #指定输出的格式
    formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息-%(message)s')
    #规定日志输出的时候按照formatter格式来打印
    ch.setFormatter(formatter)
    
    my_logging.debug("这是一个debug的信息")
    my_logging.info("这是一个info的信息")
    my_logging.warning("这是一个warning的信息")
    my_logging.error("这是一个error的信息")
    my_logging.critical("这是一个critical的信息")

    查看输出结果:

    五、日志文件输出

    import logging
    import os
    import time
    
    root_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    log_dir=os.path.join(root_dir,"logs")
    if not os.path.exists(log_dir):
        os.mkdir(log_dir)
    
    
    my_logging = logging.getLogger('bktest')#创建日志收集器
    my_logging.setLevel('DEBUG')#设置日志收集级别
    ch =logging.StreamHandler()#输出到控制台
    my_logging.setLevel('INFO')#设置日志输出级别
    my_logging.addHandler(ch)#对接,添加渠道
    
    #创建文件处理器fh,log_file为日志存放的文件夹
    log_file=os.path.join(log_dir,"{}_log".format(time.strftime("%Y-%m-%d",time.localtime())))
    fh = logging.FileHandler(log_file,encoding="UTF-8")
    my_logging.addHandler(fh)#对接,添加渠道
    
    #指定输出的格式
    formatter = logging.Formatter('%(asctime)s-%(levelname)s-%(filename)s-%(name)s-日志信息-%(message)s')
    #规定日志输出的时候按照formatter格式来打印
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    
    
    my_logging.debug("这是一个debug的信息")
    my_logging.info("这是一个info的信息")
    my_logging.warning("这是一个warning的信息")
    my_logging.error("这是一个error的信息")
    my_logging.critical("这是一个critical的信息")

    运行结果如下:

     

     

  • 相关阅读:
    printf,wprintf与setlocale,char与wchar_t区别
    C++常量表达式、const、constexpr(C++11新增)的区别
    珍珠项链 Beads
    A Horrible Poem
    三个朋友
    Seek the Name, Seek the Fame
    Power Strings
    图书管理
    子串查找
    山峰和山谷 Ridges and Valleys
  • 原文地址:https://www.cnblogs.com/mrwhite2020/p/16316031.html
Copyright © 2020-2023  润新知