logging模块高级应用(编码方式)
前言:
在一个项目中,日志是很重要的一部分,可以帮助我们记录程序发生了什么,有助于帮助分析程序以及定位程序发生的问题,其作用不言而喻。
一、logging的组成
记录器:logger,提供应用程序代码能直接使用的接口。
处理器:handler,将记录器产生的日志发送到目的地(如控制台,文件,邮件等等)。
过滤器:filter,提供更好的粒度控制,决定哪些日志会被输出。
格式器:formatter,设置日志内容的组成结构和消息字段。
二、记录器
通过logging模块可以获得记录器:logger = logging.getLogger()
getLogger()的参数:
name:默认为None。
import logging # 记录器 logger = logging.getLogger() # 记录器的日志级别 logger.setLevel("INFO")
获得了记录器后,可以为记录器设置基本:logger.setLevel()
setLevel()的参数:
level:用例基本
三、处理器
在获得记录器后,就可以设置处理器,用于设置日志输出目的地。
常见的输出目的地有2中:控制台与日志。
控制台处理器:ch = logging.StreamHandler(),参数:stream,默认为None
文件处理器:fh = logging.FileHandler(),filename:文件路径。mode:文件访问方式,默认”a“。encoding:编码方式,默认None。delay:延迟,默认False。
ch = logging.StreamHandler() fh = logging.FileHandler(filename="abc.log", mode="a", encoding="utf-8")
四、过滤器
过滤器用来过滤日志
#定义一个过滤器 flt1 = logging.Filter("logger1") #名字就是logger记录器的名字 #关联过滤器 #1.logger关联过滤器 logger.addFilter(flt1) #2.处理器关联过滤器 sh1.addFilter(flt1) #fh1.addFilter(flt1) #过滤器定义在记录器上的时候,不管你设置了任何关于这个过滤器的任何设置,都不起作用。 #过滤器定义在哪个处理器上,哪个处理器就不起作用,也就可以控制日志的输出,想要还是不想要。 #特别是在项目调试的时候,不想让日志记录到文件里去,直接在屏幕显示,就过滤到fh #代码上线后,日志记录到文件,不用在屏幕显示,就过滤掉sh
五、格式器
logging.Formatter()
参数:fmt:输出信息格式。datefmt:日期格式。style:风格,默认'%'。validate:未知
formatter = logging.Formatter(fmt="%(asctime) s%(message)s | %(filename)s: %(lineno)s", datefmt="%Y-%m-%d %H:%M:%S")
常用的格式:

六、logging的封装
整体思路如下:
将处理器添加至记录器,将格式器添加至处理器。
import logging import os log_path = os.path.dirname(os.path.abspath(__file__)) print(log_path) class Logger: def __init__(self, logger_name): self.logger_name = logger_name self.logger = logging.getLogger(logger_name) self.logger.setLevel("DEBUG") self.log_path = log_path + "\\aaa.log" self.ch = logging.StreamHandler() self.fh = logging.FileHandler(filename=self.log_path) self.formatter = logging.Formatter(fmt="%(asctime)s | %(filename)s:%(lineno)d %(levelname)s %(message)s", datefmt="%Y-%m-%d %H:%M:%S") self.ch.setFormatter(self.formatter) self.fh.setFormatter(self.formatter) self.logger.addHandler(self.fh) self.logger.addHandler(self.ch) def get_logger(self): return self.logger
浙公网安备 33010602011771号