python之logging日志(二)
2021-06-11 01:05
标签:字符 定义函数 logging 返回 调用函数 utils logger 数字 封装 日志封装 1、封装日志函数(主要) 1)封装:将代码装在一个盒子里面,盒子的形式有函数、类。即将代码逻辑封装成函数或者类,然后再调用函数和类 2)日志函数的封装: a、def get_logger(name,logger_level,stream_handler_level,fmt_str,file,file_handler_level)返回值为Logger(收集器) name:收集器的名称,logger_level:收集器日志等级,stream_handler_level:流处理器等级,fmt_str:日志格式化字符串,file:日志输出文件,在函数里面需要判断是否存在file,存在file的情况下才能获取文件处理器,file_hanler_level b、因为需要传入的参数比较多,调用的时候还是很麻烦,所以定义函数的时候参数都给默认值,这样调用的时候即使不传入参数也能用 def get_logger(name="root", logger_level="DEBUG", stream_handler_level="DEBUG", fmt_str="%(asctime)s:%(levelname)s:%(name)s:%(message)s----%(filename)s----%(lineno)d", file=None, file_handler_level="INFO") 因为在控制台需要输出debug的日志,需要调试,而文件中无需输出debug的日志,故设置日志等级为info c、日志格式必须需要添加: 1)%(levelname)s:日志等级名称 2)%(name)s:收集器的名称 3)%(message)s:日志内容信息 4)%(asctime)s:日志输出时间, 默认形式为 ‘2003-07-08 16:49:45,896‘ (逗号之后的数字为时间的毫秒部分)。 5)%(filename)s:日志打印的py文件名称( 6)%(lineno)d:发出日志记录调用所在的源行号。 2、类封装 使用继承logging.Logger来封装 class Logger(logging.Logger): # 因为继承了logging.Logger,所以当创建Logger的时候自己本身就是收集器了 def __init__(self, name="root", logger_level="DEBUG", stream_handler_level="DEBUG", fmt_str="%(asctime)s:%(levelname)s:%(name)s:%(message)s----%(filename)s----%(lineno)d", file=None, file_handler_level="INFO"): super().__init__(name,logger_level) # 调用父类__init__,相当于logging.getLogger(name)+Logger.setLevel(logger_level) , # 因为继承了logging.Logger类,它本身就是收集器了,只需要传入name和logger_level进行初始化设置 # 设置日志格式 fmt = logging.Formatter(fmt_str) # 获取处理器并设置日志等级以及日志格式,并添加到收集器 handler = logging.StreamHandler() handler.setLevel(stream_handler_level) handler.setFormatter(fmt) # 添加处理器到收集器 self.addHandler(handler ) # 获取文件处理器并设置日志等级以及日志格式 if file: file_handler = logging.FileHandler(file, encoding="utf-8") file_handler.setLevel(file_handler_level) file_handler.setFormatter(fmt) self.addHandler(file_handler) python之logging日志(二) 标签:字符 定义函数 logging 返回 调用函数 utils logger 数字 封装 原文地址:https://www.cnblogs.com/lynne-wu/p/14234297.htmlpathname
的文件名部分)。