zoukankan      html  css  js  c++  java
  • python语法基础-常用模块-logging模块

    ###############    logging模块   ################

    介绍:

    # logging
    # 日志,用来保持增删查改的记录,一个记录没有了是没有创建,还是创建了又删除了,需要记录日志
    # 有了log,就可以使用这个来替代print来调试程序,线上也需要日志来定位错误,排查问题,这是必须的,
    # 这些日志都是程序员写出来的,而且都是要输出到文件的,
    
    # 使用logging日志两种方式
    # 1,简单配置,但是受到的局限比较大,
    # 2,配置logger对象,
    # 这两个是独立的,

    简单配置:

    # 简单配置
    # 默认情况下只显示警告级别及以上信心
    import logging
    file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',)
    logging.basicConfig(
        format='%(asctime)s - %(name)s - %(levelname)s -%(module)s:  %(message)s',
        datefmt='%Y-%m-%d %H:%M:%S',
        handlers=[file_handler,], # 这种简单配置有一个大问题就是不能同时输出到文件和屏幕,
        level=logging.DEBUG  # 这样都显示出来了,但是不能只打印某一种信息,只能说是打印这个级别以上的信息
    )
    logging.debug('debug message')  # 调试模式,这个级别最低,
    logging.info('info message')  # 显示正常的信息
    logging.warning('warning message')  # 显示警告信息
    logging.error('error message')  # 显示错误信息
    logging.critical('critical message')  # 显示严重错误信息

    常用配置:

    class Logger:
    
        def __init__(self):
            import logging
            self.logger = logging.getLogger()  # 实例化一个logger对象
            self.logger.setLevel(logging.DEBUG)  # 设置打印级别
    
            fh = logging.FileHandler('hwy404.log', encoding='utf-8')  # 实例化一个文件句柄,创建一个handler,用于写入日志文件
            ch = logging.StreamHandler()  # 再创建一个handler,用于输出到控制台
            formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
            fh.setLevel(logging.DEBUG)
            fh.setFormatter(formatter)
            ch.setFormatter(formatter)
            ch.setLevel(logging.INFO)
    
            self.logger.addHandler(fh)  # logger对象可以添加多个fh和ch对象
            self.logger.addHandler(ch)
    
    
        @property
        def get_log(self):
            """定义一个函数,回调logger实例"""
            return self.logger

    用法:
    a = Logger()
    a.get_log.info("info message")

    #####################################

    解决python log模块重复打印日志问题
    
    class Logger:
    
        def __init__(self):
            import logging
            self.logger = logging.getLogger()  # 实例化一个logger对象
            self.logger.setLevel(logging.DEBUG)  # 设置打印级别
    
            fh = logging.FileHandler('hwy404.log', encoding='utf-8')  # 实例化一个文件句柄,创建一个handler,用于写入日志文件
            ch = logging.StreamHandler()  # 再创建一个handler,用于输出到控制台
            formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    
            fh.setLevel(logging.DEBUG)
            fh.setFormatter(formatter)
            ch.setFormatter(formatter)
            ch.setLevel(logging.INFO)
    
            self.logger.addHandler(fh)  # logger对象可以添加多个fh和ch对象
            self.logger.addHandler(ch)
            # print(self.logger.handlers)
            # print(self.logger.handlers[:1])
            # print(self.logger.handlers[-2:])
            # self.logger.handlers = self.logger.handlers[:1]
            self.logger.handlers = self.logger.handlers[-2:]
    
    
        @property
        def get_log(self):
            """定义一个函数,回调logger实例"""
            return self.logger

    思路:

    原因是Logger类中的handlers列表中添加了多个对象;
    所以,要解决这个问题,我的思路是清除handlers列表中多余的对象;
    所以我们只需要一组对象即可,其他的清掉,虽然说是重复数据,其实不重复,他们是不同的对象,所以用set去重是不行的;
    self.logger.handlers = self.logger.handlers[-2:]

    #########################################

    解决Python3 控制台输出InsecureRequestWarning问题
    
    问题:
    使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误:
    InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. 
    See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 解决方法: 在代码中添加以下代码即可解决: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

    ######################################

    解决屏蔽requests.packages.urllib3.connectionpool日志记录:
    
    解决:屏蔽第三方库日志
    requests 库日志屏蔽
    logging.getLogger("requests").setLevel(logging.ERROR)

    ####################################

  • 相关阅读:
    详解ASP.NET的内置对象
    如何架设FTP服务器
    输出JSON问题
    new , virtual , override
    Javascript 操作select控件大全(新增、修改、删除、选中、清空、判断存在等)
    Java回顾之I/O
    数据结构之栈和队列
    Java回顾之多线程同步
    设计模式之行为型模式
    Java回顾之网络通信
  • 原文地址:https://www.cnblogs.com/andy0816/p/13828513.html
Copyright © 2011-2022 走看看