python之logging日志(二)

日志封装

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文件名称( pathname 的文件名部分)。

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)

 

    

    

    

本文来自博客园,作者:%女王%,转载请注明原文链接:https://www.cnblogs.com/lynne-wu/p/14234297.html

原文地址:https://www.cnblogs.com/lynne-wu/p/14234297.html