资讯专栏INFORMATION COLUMN

python打印日志方式的使用方法(logging模块)

89542767 / 603人阅读

  Python函数库内置系统日志控制模块logging,logging所涉及到的到4个关键部件,这种部件搭建了logging管理体系,接下来本文关键为大家介绍了关于python打印日志方式的使用方法,务必的小伙伴可以借鉴一下


  一、基本素养


  1、logging模多块应用


  (1)5个系统日志等级/还有5个导出系统日志的内置函数


  (2)系统日志采集器、日志输出销售渠道定义


  (3)怎样自定系统日志采集器


  (4)如何封装自定的系统日志采集器


  二、logging


  python的官方网库,打印日志使用的,不需要下载,使用中立即启用


  1、logging的基本上应用


  1.1、系统日志的5个等级(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


  导出渠道支持:导出到文件夹和导出到控制面板


  Demo案例1——默认设置WARNING等级


  importlogging
  #打印出不一样档次的系统日志(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等级系统日志


  Demo案例2——默认系统日志采集器


  importlogging
  ##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级别的日志")


  运行结果:

01.png

  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="测试")


  输出结果:

02.png

  Demo实例4——封装自定义日志收集器


  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--------")


  输出结果:

03.png

  综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/129054.html

相关文章

  • python logging 日志重复打印问题定位

    摘要:在同一系统中我们有时要用到这种机制来方便日志打印,因此有时会不同进程使用同一前缀名来初始化。避免日志重复的原则是在名有相同前缀的情况下对于一个模块两个进程调的情况,涉及到会被其他进程的模块,不应触发任何同名前缀的的操作。 图: 图编号按顺序1-4,嫌长可以跳过定位过程看总结 showImg(https://segmentfault.com/img/bVbjmIa?w=672&h=461...

    crossea 评论0 收藏0
  • 关于pythonlogging总结

    摘要:确认一切按预期运行。表明发生了一些意外,或者不久的将来会发生问题如磁盘满了。由于更严重的问题,软件已不能执行一些功能了。严重错误,表明软件已不能继续运行了。对于不能获取的名称,则记录到模块。 最近在写一些python脚本,总是使用print来打印信息感觉很low,所以抽空研究了一下python的logging库,来优雅的来打印和记录日志: 一、简单的将日志打印到屏幕: import l...

    kaka 评论0 收藏0
  • Pythonlogging模块

    摘要:最近修改了项目里的相关功能,用到了标准库里的模块,在此做一些记录。可能没有线程名。可能没有用户输出的消息日志级别有如下级别,,,,默认级别是,模块只会输出指定以上的。在或者中这是很常见的方式。正常的做法应该是全局只配置一次。 最近修改了项目里的logging相关功能,用到了python标准库里的logging模块,在此做一些记录。主要是从官方文档和stackoverflow上查询到的一...

    zsirfs 评论0 收藏0
  • Python模块分析:第4节-logging日志模块

    摘要:上一篇文章模块分析第节模块一日志记录的级别优先级,记录调试的详细信息,只在调试时开启优先级,记录普通的消息,报告错误和警告等待。监听端口号上一篇文章模块分析第节模块 上一篇文章:Python模块分析:第3节-typing模块 一、日志记录的级别 debug:优先级10,记录调试的详细信息,只在调试时开启 info:优先级20,记录普通的消息,报告错误和警告等待。 warning:优...

    MartinHan 评论0 收藏0
  • python--模块2

    摘要:可能没有用户输出的消息创建一个,用于写入日志文件再创建一个,用于输出到控制台对象可以添加多个和对象序列化模块什么叫序列化将原本的字典列表等内容转换成一个字符串的过程就叫做序列化。 hashlib模块 1.Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等。什么是摘要算法呢?摘要算法又称哈希算法、散列算法。它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(...

    13651657101 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<