Python logging模块

一、logging模块的四大组件

(1)Loggers(记录器),提供应用程序代码能直接使用的接口(可以理解为一只笔)

# 记录器,通过名字拿到笔,是单例的,默认root
logger = logging.getLogger(__name__)
# 常用方法
logger.setLevel() # 设置日志级别
logger.AddHandler()  # 添加处理器
logger.removeHandler()  # 移除处理器

(2)Handlers(处理器),将记录产生的日志发送到目的地(console,文件,短信,邮件等,可通俗理解为将文字写到什么地方如笔记本之类)

# 常用的处理器有两种 StreamHandler(输出到终端)FileHandler(输出到文件)
# 创建StreamHandler对象
  sh = logging.StreamHandler() 

# 创建FileHandler对象
  fh = logging.FileHandler(filename, mode='...', encoding='...',delay=False) 

(3)Filters(过滤器),提供更好的粒度控制,决定哪些日志会被输出(输出级别,不常用)

(4)Formatters(格式化器),设置日志内容的组成结构和消息字段格式(通俗地理解就是书写格式)

# 使用 logging.Formatter(),基本格式为:%(xxx)s 

formatter =  logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')

几个组件之间的关系 

     --> StreamHandler(创建输出到屏幕的handler)-->设置日志等级(不设置则默认以logger的级别)
   logger(创建一个记录器并设置默认级别)                        ——>创建formatter(格式化)----  
     --> FileHandler(创建输出到文件的handler)-->设置日志等级(同上,只有>=logger的级别时生效)

   ----->用formatter渲染所有的handler---->将所有的handler加入到logger内---->程序调用logger

二、logging日志级别

(1)DEBUG:详细的调试信息

(2)INFO:关键节点的信息,确认一切按预期运行

(3)WARNING(default):即使发生某些状况,软件仍能按预期运行

(4)ERROR:软件大部分按预期运行,但是部分功能可能缺失

(5)CRITICAL:严重的错误,这表明程序本身无法继续运行(程序崩溃)

三、实现logging的两种方式

(1)通过logging.basicConfig()实现

# 配置logging(输出到终端)
logging.basicConfig(level=logging.WARNING, format='%(asctime)s-%(filename)s-[line:%(lineno)d]-%(levelname)s:%(message)s')


# 两种只能生效一种,若想要输出到文件,需要注释掉输出到终端部分,反之亦然
# 输出到文件
logging.basicConfig(level=logging.WARNING,
                    filename="./log.txt"
                    filemode="a", 
                    format='%(asctime)s-%(filename)s-[line:%(lineno)d]-%(levelname)s:%(message)s')


# logging调试
logging.debug("this is debug log")
logging.info("this is info log")
logging.warning("this is warning log")  # 默认级别,只会输出等于/高于它级别的日志信息
logging.error("this is errorg log")
logging.critical("this is critical log")

(2)自定义处理器,同时输出到文件和终端

import logging
if __name__ == '__main__' :
  
    # 同时输出到终端和文件
    # 1 step: 创建logger对象,并设置总的日志级别
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)

    # 2 step: 创建一个handler(FileHandler) 用于写入日志文件
    logfile = './log.txt'
    fh = logging.FileHandler(logfile, mode='a', encoding='GBK')
    fh.setLevel(logging.DEBUG)  # fh 的 log等级(fh输出到的log中等级以logger为主,总开关,比info高则以高的为主)

    # 3 step: 创建另一个handler(StreamHandler) 用于输出到终端
    ch = logging.StreamHandler()
    ch.setLevel(logging.WARNING)

    # 4 step: 定义handle的输出格式(格式化器 Formatter)
    formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s')
    fh.setFormatter(formatter)
    ch.setFormatter(formatter)

    # 5 step: 将处理器添加到记录器中
    logger.addHandler(fh)
    logger.addHandler(ch)

    # 开始使用log功能
    logging.debug('这是 loggging debug message')
    logging.info('这是 loggging info message')
    logging.warning('这是 loggging a warning message')
    logging.error('这是  loggging error message')
    logging.critical('这是 loggging critical message')

    # 执行实例    
    try:
        a = int(input("请输入数字a:"))
        b = int(input("请输入数字b:"))
        c = a / b
        print(f"计算结果为:{c}")
    except Exception as ret:
        logging.error(ret)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值