加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

python打印日志代码使用方法介绍

发布时间:2022-07-04 21:48:16 所属栏目:PHP教程 来源:互联网
导读:本篇文章小编给大家分享一下python打印日志代码使用方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。 一、必备技能 1、logging模块的使用 (1)5个日志等级/以及5个输出日志的内置函数 (2)日志收集器、日志输出渠道的概
  本篇文章小编给大家分享一下python打印日志代码使用方法,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。
 
  一、必备技能
 
  1、logging模块的使用
 
  (1)5个日志等级/以及5个输出日志的内置函数
 
  (2)日志收集器、日志输出渠道的概念
 
  (3)如何自定义日志收集器
 
  (4)如何封装自定义的日志收集器
 
  二、logging
 
  python的官方库,打印日志用的,无需安装,使用时直接调用
 
  1、logging的基本使用
 
  1.1、日志的五个等级(DEBUG/INFO/WARNING/ERROR/CRITICAL)
 
  (1)DEBUG:调试模式下的日志,只给程序员看的日志
 
  (2)INFO:程序正常运行的时候输出的日志
 
  (3)WARN/WARNING:警告信息,当前程序还可以运行,后面有可能出现问题
 
  (4)ERROR:程序执行过程总的错误信息
 
  (5)CRITICAL:发生严重错误,阻塞流程,程序可能无法继续运行
 
  1.2、打印不同日志等级的方法:
 
  (1)logging.debug("调试日志信息")
 
  (2)logging.info("重要日志信息")
 
  (3)logging.warning("警告日志信息")
 
  (4)logging.error("错误日志信息")
 
  (5)logging.critical("致命日志信息")
 
  1.3、日志收集器和日志输出渠道:
 
  日志收集器:
 
  默认收集器的名字为root,默认收集等级为WARNING,通过如下步骤设置收集器的等级
 
  log = logging.getLogger() # 获取日志收集器,默认为root
 
  log.setLevel("等级") # 等级必须大写
 
  logging.basicConfig(level=logging.DEBUG) # 设置收集器的等级
 
  日志输出渠道:
 
  默认输出等级为WARNING
 
  输出渠道支持:输出到文件夹和输出到控制台

  import logging
  # 打印不同等级的日志(debug、info、warning、error、critical)
  # 如下5条日志,只会打印WARNING等级以后的日志
  logging.debug("这是一条debug级别的日志")
  logging.info("这是一条info级别的日志")
  logging.warning("这是一条warning级别的日志")
  logging.error("这是一条error级别的日志")
  logging.critical("这是一条critical级别的日志")
  运行结果 :(只会打印WARNING级别以上的日志)
 
  WARNING:root:这是一条warning级别的日志
 
  ERROR:root:这是一条error级别的日志
 
  CRITICAL:root:这是一条critical级别的日志
 
  import logging
  # # logging.basicConfig(level=logging.DEBUG) 设置日志级别
  # 未指定name,默认返回自带的默认的root收集器
  # 默认输出WARN级别以上的等级日志
  # 如果设置了WARNING以下的等级,则输出WARNING等级以上的日志
  # 如果设置了WARNING以上的等级,比如设置了ERROR,则输出ERROR等级以上的日志
  log = logging.getLogger()
  # log.setLevel("DEBUG")
  # log.setLevel("INFO")
  # log.setLevel("WARNING")
  log.setLevel("ERROR")
  # log.setLevel("CRITICAL")
  
  logging.debug("这是一条debug级别的日志")
  logging.info("这是一条info级别的日志")
  logging.warning("这是一条warning级别的日志")
  logging.error("这是一条error级别的日志")
  logging.critical("这是一条critical级别的日志")
  运行结果:
 
  ERROR:root:这是一条error级别的日志
 
  CRITICAL:root:这是一条critical级别的日志
 
  2、自定义日志收集器
 
  2.1、创建日志收集器
 
  log = logging.getLogger(name="rose_logger")
 
  不传name参数时,默认返回收集器名字为“root”
 
  传了name参数时,会创建一个新的日志收集器
 
  2.2、创建日志收集渠道
 
  (1)输出到控制台:
 
  pycharm = logging.StreamHandler()
 
  (2)输出到文件:
 
  file = logging.FileHandler(os.getcwd()+r"rose.log",encoding="utf-8")
 
  file=handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")
 
  注意点(参数):
 
  filename, 日志的文件名称(包含路径)
 
  when= 'h', 日志的切割单位
 
  # S - Seconds 秒
 
  # M - Minutes 分钟
 
  # H - Hours 小时
 
  # D - Days 天(24小时)
 
  # midnight - roll over at midnight 日切
 
  # W{0-6} - roll over on a certain day; 0 - Monday 周
 
  interval=1, 滚动周期,与when='h'连动,1-表示以时间为周期
 
  backupCount=0 保留日志文件的个数,设置为10,永远只保存最近的10个文件
 
  2.3、创建日志的输出格式(1)创建日志格式对象
 
  pycharm_fmt = logging.Formatter(fmt=fmt1)
 
  (2)将日志输出格式绑定到日志输出渠道
 
  pycharm.setFormatter(fmt=pycharm_fmt) ——设置到控制台日志渠道
 
  file.setFormatter(fmt=pycharm_fmt1)——设置到文件日志渠道
 
  (3)常用的格式模板(也可以自己定义)
 
  fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
 
  fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
 
  (4)格式必须按照指定的格式格式化。常用的如下:
 
  %(asctime)s——当前时间
 
  %(funcName)s——模块名
 
  %(lineno)d——行号
 
  %(levelname)s——日志等级名称
 
  %(message)s——具体的日志内容
 
  Demo实例3——自定义日志收集器和日志格式
 
  import logging,os
  from logging import handlers
  # 1、创建日志收集器
  log = logging.getLogger(name="rose_logger")
    
  # 2、创建日志收集渠道
  # 输出控制台
  pycharm = logging.StreamHandler()
  # 输出文件夹
  file = logging.FileHandler(os.getcwd()+r"rose.log",encoding="utf-8")
  # file = handlers.TimedRotatingFileHandler(filename="test.log",when="D",interval=1,backupCount=10,encoding="utf-8")
    
  # 3、创建日志的输出格式
  fmt1 = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
  # 创建一个日志输出对象
  pycharm_fmt = logging.Formatter(fmt=fmt1)
  fmt2 = '[%(asctime)s-%(name)s-%(levelname)s-%(filename)s-%(lineno)d]:%(message)s'
  pycharm_fmt1 = logging.Formatter(fmt=fmt2)
    
  # 4、日志输出格式绑定到日志输出渠道
  pycharm.setFormatter(fmt=pycharm_fmt)
  file.setFormatter(fmt=pycharm_fmt1)
    
  # 5、直接给收集器设置日志级别就可以了,渠道会继承收集器的日志级别
  log.setLevel(level=logging.DEBUG)
  # 5、给收集渠道设置日志级别,文件渠道,控制台输出的级别不会一样
  # pycharm.setLevel(logging.DEBUG)
    
  # 6、将日志收集渠道绑定到日志收集器
  log.addHandler(pycharm)
  log.addHandler(file)
    
  log.info(msg="测试")

  import logging
  from logging import handlers
  def create_log(name,level,filename,sh_level,fh_level):
      """
      :param name:  日志收集器名字
      :param level: 日志收集器的等级
      :param filename:  日志文件的名称
      :param sh_level:  控制台输出日志的等级
      :param fh_level:    文件输出日志的等级
      :return: 返回创建好的日志收集器
      """
    
      # 1、创建日志收集器
      log = logging.getLogger(name)
    
      # 2、创建日志收集器的等级
      log.setLevel(level=level)
    
      # 3、创建日志收集渠道和等级
      sh = logging.StreamHandler()
      sh.setLevel(level=sh_level)
      log.addHandler(sh)
      fh = logging.FileHandler(filename=filename,encoding="utf-8")
      # fh1 = handlers.TimedRotatingFileHandler(filename=filename,when="D",interval=1,backupCount=10,encoding="utf-8")
      fh.setLevel(level=fh_level)
      log.addHandler(fh)
    
      # 4、设置日志的输出格式
      formats = "%(asctime)s - [%(funcName)s-->line:%(lineno)d] - %(levelname)s:%(message)s"
      log_format = logging.Formatter(fmt=formats)
      sh.setFormatter(log_format)
      fh.setFormatter(log_format)
      return log   
  if __name__ == '__main__':
      log = create_log(name="rose_log",level=logging.DEBUG,filename="test_log.log",sh_level=logging.DEBUG,fh_level=logging.DEBUG)
      log.info(msg="--------debug--------")
      log.info(msg="--------info--------")
      log.info(msg="--------warning--------")
      log.info(msg="--------error--------")
      log.info(msg="--------critical--------")。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读