暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

python | Day59 python中日志模块的基本应用

走向易富强之路 2021-09-24
271

背景说明:
1、为了防止三天打鱼两天晒网式学习
2、每日更新1-2个小知识点或者案例
3、只看和跟着做的理解程度是不一样的
4、建议一起打卡练习
5、互相督促打卡 + v:yifuqiang2021

Day59

目标:
  • 日志
  • 日志等级
  • python中日志模块基本应用

一、日志
  • 可以追踪程序运行时所调用事件的方法
  • 作用:
    • 了解程序运行情况
    • 判断程序是否正常
    • 分析和定位程序错误问题

二、日志等级
  • 根据日志等级,可以反映出问题的严重程度
  • 1级别,debug:调试,开发用于调试代码 
  • 2级别,info:表示程序正常运行  
  • 3级别,warning:警告,程序有问题,但是不影响程序正常运行
  • 4级别,error:错误,代表程序有问题
  • 5级别,critical:严重的,程序出现了严重问题  

实例,在控制台输出日志:
    import logging
    # 设置日志级别
    logging.basicConfig(level=logging.INFO)
    logging.debug('debug模式')
    logging.info('info模式')
    logging.warning('warning模式')
    logging.error('error模式')
    logging.critical('critical模式')
    运行结果:

    三、python中日志模块基本应用
    • python中自带了日志模块,导入即可
      • import logging
    • logging模块的作用
      • 生成日志,设置日志路径,日志等级等等


    3.1)logging模块定义的格式字符串字段
    %(asctime)s
    日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896
    %(created)f
    日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值
    %(msecs)d
    日志事件发生事件的毫秒部分
    %(levelname)s
    该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
    %(name)s
    所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger
    %(message)s
    日志记录的文本内容,通过 msg % args计算得到的
    %(pathname)s
    调用日志记录函数的源码文件的全路径
    %(filename)s
    pathname的文件名部分,包含文件后缀
    %(module)s
    filename的名称部分,不包含后缀
    %(lineno)d
    调用日志记录函数的源代码所在的行号
    %(funcName)s
    调用日志记录函数的函数名

    实例1:设置输出日志的发生时间,文件名,日志等级,函数名,日志内容
      import logging
      #日志格式输出
      fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s'
      # 设置日志级别
      logging.basicConfig(level=logging.INFO,format=fmt)
      logging.debug('debug模式')
      logging.info('info模式')
      logging.warning('warning模式')
      logging.error('error模式')
      logging.critical('critical模式')
      运行结果:
      • 设置文件处理器basicConfig的格式为'utf-8'

      • 避免乱码
      • ctrl+鼠标双击basicConfig,进入原码查看
      • 搜索FileHandler,找到以下内容,添加:,encoding='utf-8'

      3.2)将日志内容写入文件
        logging.basicConfig(level=logging.INFO,format=fmt,filename='./Log/log0817.log')

        四、使用Logging日志系统的四大组件
        • loggers:提供应用程序代码直接使用的接口
        • handlers:用于将日志记录发送到指定的目的位置
        • formatters:用于控制日志信息的最终输出格式
        • filters:提供更细粒度的日志过滤功能,用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略)

        4.1)创建日志器
          import logging
          # 创建日志器
          logger = logging.getLogger()
          # 设置日志级别
          logger.debug('debug模式')
          logger.info('info模式')
          logger.warning('warning模式')
          logger.error('error模式')
          logger.critical('critical模式')
          运行结果:

          4.2)创建处理器
            import logging
            # 创建日志器
            logger = logging.getLogger()
            # 设置日志级别
            logger.setLevel(logging.DEBUG)
            # 创建一个处理器,将内容输出到控制台
            sh = logging.StreamHandler()
            # 把控制台加载到日志器


            logger.addHandler(sh)
            logger.debug('debug模式')
            logger.info('info模式')
            logger.warning('warning模式')
            logger.error('error模式')
            logger.critical('critical模式')
            运行结果:

            4.3)创建格式器
              import logging
              # 创建日志器
              logger = logging.getLogger()
              # 设置日志级别
              logger.setLevel(logging.DEBUG)
              # 创建一个格式器
              fmt = logging.Formatter(fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s')
              # 创建一个处理器,将内容输出到控制台
              sh = logging.StreamHandler()
              # 把格式器加载到控制台
              sh.setFormatter(fmt)
              # 把控制台加载到日志器
              logger.addHandler(sh)
              logger.debug('debug模式')
              logger.info('info模式')
              logger.warning('warning模式')
              logger.error('error模式')
              logger.critical('critical模式')
              运行结果:

              4.4)将日志信息输出到文件
                import logging
                # 创建日志器
                logger = logging.getLogger()
                # 设置日志级别
                logger.setLevel(logging.DEBUG)
                # 创建一个格式器
                fmt = logging.Formatter(fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s')
                # 创建一个处理器,将内容输出到控制台
                sh = logging.StreamHandler()
                # 创建一个处理器,将内容输出到文件
                fh = logging.FileHandler('./log/log081702.log',encoding='utf-8')
                # 把文本处理器加载到日志器中
                logger.addHandler(fh)
                # 把格式器放入到文本控制器
                fh.setFormatter(fmt)
                # 把格式器加载到控制台
                sh.setFormatter(fmt)
                # 把控制台加载到日志器


                logger.addHandler(sh)
                logger.debug('debug模式')
                logger.info('info模式')
                logger.warning('warning模式')
                logger.error('error模式')
                logger.critical('critical模式')
                运行结果:

                4.5)配合函数实现log日志输出
                  import logging
                  class DemoLog:
                  def txt_log(self):
                  # 创建日志器
                  logger=logging.getLogger('logger')
                  # 设置日志级别
                  logger.setLevel(logging.DEBUG)
                  # 创建一个格式器
                  formator=logging.Formatter(fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s')
                  # 创建一个处理器 输出文件中
                  fh=logging.FileHandler('./log/log081702.log',encoding='utf-8')
                  # 创建一个处理器 输出到控制台
                  sh=logging.StreamHandler()
                  # 把文本处理器加载到日志器中
                  logger.addHandler(fh)
                  # 把控制台加载到日志器
                  logger.addHandler(sh)
                  # 把格式器放入控制台
                  sh.setFormatter(formator)
                  # 把格式器放入到文本控制器
                  fh.setFormatter(formator)
                  return logger

                  def test(self,a,b):
                  try:
                  sum=a+b
                  self.txt_log().info('正确计算{}+{}'.format(a,b))
                  return sum
                  except Exception:
                  self.txt_log().error('错误计算{}+{}'.format(a,b))
                  a=DemoLog().test(9,4)
                  运行结果:

                  五、总结
                  • 日志
                    • 导入日志模块:import logging
                  • 日志等级
                    • 函数的方法:
                      • logging.debug('debug模式')
                      • logging.info('info模式')
                      • logging.warning('warning模式')
                      • logging.error('error模式')
                      • logging.critical('critical模式')
                    • 日志组件的方法:
                      • logger.debug('debug模式')
                      • logger.info('info模式')
                      • logger.warning('warning模式')
                      • logger.error('error模式')
                      • logger.critical('critical模式')
                  • python中日志模块基本应用
                    • 函数的方法
                      • 设置日志级别
                      • 设置日志格式输出
                        • 格式的变量='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s'
                      • logging.basicConfig(level=logging.日志级别,format=格式的变量)
                    • 日志组件的方法
                      • 创建日志器
                        • logger = logging.getLogger()
                      • 设置日志级别
                        • logger.setLevel(logging.DEBUG)
                      • 创建一个格式器
                        • fmt = logging.Formatter(fmt='%(asctime)s %(filename)s %(levelname)s %(funcName)s %(message)s')
                      • 创建一个处理器,将内容输出到控制台
                        • sh = logging.StreamHandler()
                      • 创建一个处理器,将内容输出到文件
                        • fh = logging.FileHandler('./log/log081702.log',encoding='utf-8')
                      • 把文本处理器加载到日志器中
                        • logger.addHandler(fh)
                      • 把格式器放入到文本控制器
                        • fh.setFormatter(fmt)
                      • 把格式器加载到控制台
                        • sh.setFormatter(fmt)
                      • 把控制台加载到日志器
                        • logger.addHandler(sh)

                  “你的鼓励,是我继续的动力”
                  文章转载自走向易富强之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                  评论