文章目录
Python Logging Module 日志模块
logging 日志流处理
logging 模块日志模块组件
logging 模块的日志模块总共包含了四个组件:
-
日志器 Loggers : 提供应用程序可以一直使用的接口,并且可以设置产生的日志等级等,日志产生之后,将会交给已注册的处理器进行处理
-
处理器 Handlers :对 Logger 产生的日志进行处理 —— 通过相应的函数进行处理方式的设置,例如输出格式,以及输出的日志等级等
-
过滤器 Filters :对将要输出的日志进行更好过滤以确定最终要输出的日志结果
-
格式化器 Formatter :确定日志最终的输出格式
事实上,在一个应用程序的整个过程中,通过 Logger 类的实例进行日志处理和输出,这些实例通过一个命名空间的层级结构组织起来,每个命名空间和子空间之间通过 '.'
来分隔,例如:scan.text
在 scan
这个 Logger 的子空间中,日志名根据需要可以任意定义。
显然,这种命名方式马上可以联想到 Python 模块的命名方式,所以官方文档中为我们提供的一种较好的命名方法就是通过模块的 __name__
属性来进行命名,既可以实现不同层级的模块之间的命名空间组织,又使得每个日志输出都和对应的模块关联起来,方便进行日志查找和管理:
logger = logging.getLogger(__name__)
logging 日志流处理流程
官网的日志处理流程:
所以,日志流处理的四个组件的过程如下:
通过 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