Python 日志输出 logging

Python Logging Module 日志模块


logging 日志流处理

Official tutorial

logging 模块日志模块组件

logging 模块的日志模块总共包含了四个组件:

  • 日志器 Loggers : 提供应用程序可以一直使用的接口,并且可以设置产生的日志等级等,日志产生之后,将会交给已注册的处理器进行处理

  • 处理器 Handlers :对 Logger 产生的日志进行处理 —— 通过相应的函数进行处理方式的设置,例如输出格式,以及输出的日志等级等

  • 过滤器 Filters :对将要输出的日志进行更好过滤以确定最终要输出的日志结果

  • 格式化器 Formatter :确定日志最终的输出格式

事实上,在一个应用程序的整个过程中,通过 Logger 类的实例进行日志处理和输出,这些实例通过一个命名空间的层级结构组织起来,每个命名空间和子空间之间通过 '.' 来分隔,例如:scan.textscan 这个 Logger 的子空间中,日志名根据需要可以任意定义。

显然,这种命名方式马上可以联想到 Python 模块的命名方式,所以官方文档中为我们提供的一种较好的命名方法就是通过模块的 __name__ 属性来进行命名,既可以实现不同层级的模块之间的命名空间组织,又使得每个日志输出都和对应的模块关联起来,方便进行日志查找和管理:

logger = logging.getLogger(__name__)
logging 日志流处理流程

官网的日志处理流程:
在这里插入图片描述

所以,日志流处理的四个组件的过程如下:

日志器 Logger
过滤器 Filter
处理器 Handler
格式化器 Formatter

通过 getLogger 函数来得到这个模块的日志器对象,然后通过 setLevel 和 addHandler 方法可以为这个日志器对象设置日志的输出等级以及日志输出的处理器:

# set log level
logger.setLevel(logging.DEBUG)

# create handler
trf_handler = logging.TimedRotatingFileHandler()
logger.addHandler(trf_handler)

创建的日志器还可以设置相应的格式化器,来确定最终输出到文件的日志的格式:

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# add formatter to timed rotating file handler
trf_handler.setFormatter(formatter)

通过直接调用不同等级的日志输出函数,就可以得到对应格式和等级的日志输出:

logger.debug('This is debug')
logger.info('This is info')
logger.warn('This is warn')
logger.error('This is error')
logger.critical('This is critical')
Loggers 日志器
Handlers 处理器

常用的日志处理器:

  • FileHandler
  • TimedRotatingFileHandler
Filters 过滤器
Formatter 格式化器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值