zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    14_java之变量|参数|返回值|修饰符
    NYOJ 202 红黑树 (二叉树)
    NYOJ 138 找球号(二) (哈希)
    NYOJ 136 等式 (哈希)
    NYOJ 133 子序列 (离散化)
    NYOJ 129 树的判定 (并查集)
    NYOJ 117 求逆序数 (树状数组)
    NYOJ 93 汉诺塔 (数学)
    HDU 2050 折线分割平面 (数学)
    天梯赛L2-008 最长对称子串 (字符串处理)
  • 原文地址:https://www.cnblogs.com/lynne-wu/p/14234297.html
Copyright © 2011-2022 走看看