Python基础-模块补充

Python日志模块详解
本文详细介绍了Python中的logging模块使用方法,包括基本的日志等级、配置日志输出位置及格式等,并提供了两种常见应用场景下的代码实例,帮助读者掌握日志模块的高级用法。
logging模块:
 方式一:仅仅只能在控制台(stream)或是文件中打印日志信息
 1.日志等级(由低到高)
   logging.debug('debug message')
   logging.info('info message')
   logging.warning('warning message')
   logging.error('error message')
   logging.critical('critical message')
 2.日志基本信息配置
 logging.basicConfig(
     level=logging.DEBUG, #默认日志等级是WARNING,这个可以对日志默认等级进行修改
  #默认把日志信息打印到控制台上(默认参数是stream),这个可以把日志信息打印到文件中。
  #即这个方法做不到把之日志信息同时打印到控制台与文件中,如果同时设置stream与filemane,则只有filename起作用!
     filename="logger.log",
     filemode="w", #这个可以调整日志打印信息的模式,默认是追加,即a!一般情况下也应该是a!
  #默认只是打印日志消息,下述可以配置打印的信息格式
  # 打印时间 打印文件名 打印行号 打印日志消息
  #注意:文件名是执行打印日志消息的文件,行号也是打印日志消息所在执行文件中的行号
     format="%(asctime)s %(filename)s[%(lineno)d]  %(message)s"
 )
 
 方式二:可以在控制台与文件中同时打印日志消息
 (一般情况下推荐方式二:因为向控制台与文件中打印消息都是可选的,不是必须同时打印,比较灵活)
 import logging
 def logger():
      #获取logger对象
      logger=logging.getLogger()
      #获取可以向文件中打印信息的对象,参数是把日志信息打印到此文件中
      fh=logging.FileHandler("test_log")
      #获取可以向控制台打印信息的对象
      ch=logging.StreamHandler()
      #设置打印日志信息的格式
      fm=logging.Formatter("%(asctime)s  %(message)s")
      #把打印格式给到文件操作与控制台操作的两个对象
      fh.setFormatter(fm)
      ch.setFormatter(fm)
      #把两个对象加到logger对象中
      logger.addHandler(fh)
      logger.addHandler(ch)
      #设置打印消息默认的等级(默认是WARNING)
      logger.setLevel("DEBUG")
return logger
 
 logger=logger()
 
 logger.debug("debug")
 logger.info("info")
 logger.warning("warning")
 logger.error("error")
 logger.critical("critical")
  
 注意:
 1.注意:*getLogger('mylogger'),mylogger是root的儿子,如果方法不加参数,则默认创建root的logger对象!
   *上述方法的参数值是唯一的,若有重复的,则后者覆盖前者!
 logger1 = logging.getLogger('mylogger')
 logger1.setLevel(logging.DEBUG)
 logger2 = logging.getLogger('mylogger')
 logger2.setLevel(logging.WARNING)
 
 fh=logging.FileHandler("test_log")
 ch=logging.StreamHandler()
 
 logger1.addHandler(fh)
 logger1.addHandler(ch)
 logger2.addHandler(fh)
 logger2.addHandler(ch)
 
  logger1.debug('logger1 debug message')
  logger1.info('logger1 info message')
  logger1.warning('logger1 warning message')
  logger1.error('logger1 error message')
  logger1.critical('logger1 critical message')
  logger2.debug('logger2 debug message')
  logger2.info('logger2 info message')
  logger2.warning('logger2 warning message')
  logger2.error('logger2 error message')
  logger2.critical('logger2 critical message')
 2.注意:如果想要设置root孙子对应的logger对象,可以logger = logging.getLogger('mylogger.sunzi').
   即通过.的形式创建不同级别的日志对象!(可以理解为以root为根节点的树)
 import logging
 logger=logging.getLogger() #创建root的logger对象
 logger1 = logging.getLogger('mylogger') #创建root的孩子mylogger
 logger1.setLevel(logging.DEBUG)
 
 fh=logging.FileHandler("test_log-new")
 ch=logging.StreamHandler()
 
 logger.addHandler(ch)
 logger.addHandler(fh)
 logger1.addHandler(fh)
 logger1.addHandler(ch)
 
 logger.debug('logger debug message')
 logger.info('logger info message')
 logger.warning('logger warning message')
 logger.error('logger error message')
 logger.critical('logger critical message')
 logger1.debug('logger1 debug message')
 logger1.info('logger1 info message')
 logger1.warning('logger1 warning message')
 logger1.error('logger1 error message')
 logger1.critical('logger1 critical message')
 
 上述代码执行结果:
 #*由于logger没有设置level,所有会打印warning以下的三条数据
 logger warning message
 logger error message
 logger critical message
 #如果mylogger检测到root对应的logger有在工作,则会中复打印2次!(次数取决与root的关系)
 #这里面的工作指的是只要把fh与ch对象加到logger中,就算在工作了!但是如果只是创建父类对象不算是工作!
 #也就是注释掉把fh与ch对象加到logger中对应代码,则logger1就不会打印2次了!
 logger1 debug message
 logger1 debug message
 logger1 info message
 logger1 info message
 logger1 warning message
 logger1 warning message
 logger1 error message
 logger1 error message
 logger1 critical message
 logger1 critical message
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值