zoukankan      html  css  js  c++  java
  • Python自动化之logging模块

    Logging模块构成

    主要分为四个部分:

    • Loggers:提供应用程序直接使用的接口
    • Handlers:将Loggers产生的日志传到指定位置
    • Filters:对输出日志进行过滤
    • Formatters:控制输出格式
    import logging
    
    logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    datefmt='%a, %d %b %Y %H:%M:%S',
                    filename='myapp.log',
                    filemode='w')
        
    logging.debug('This is debug message')
    logging.info('This is info message')
    logging.warning('This is warning message')
    

    myapp.log文件中内容为:

    Sun, 24 May 2009 21:48:54 demo2.py[line:11] DEBUG This is debug message
    Sun, 24 May 2009 21:48:54 demo2.py[line:12] INFO This is info message
    Sun, 24 May 2009 21:48:54 demo2.py[line:13] WARNING This is warning message
    

    详细参数

    logging.basicConfig函数各参数:
    filename: 指定日志文件名
    filemode: 和file函数意义相同,指定日志文件的打开模式,'w'或'a'
    format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:
     %(levelno)s: 打印日志级别的数值
     %(levelname)s: 打印日志级别名称
     %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
     %(filename)s: 打印当前执行程序名
     %(funcName)s: 打印日志的当前函数
     %(lineno)d: 打印日志的当前行号
     %(asctime)s: 打印日志的时间
     %(thread)d: 打印线程ID
     %(threadName)s: 打印线程名称
     %(process)d: 打印进程ID
     %(message)s: 打印日志信息
    datefmt: 指定时间格式,同time.strftime()
    level: 设置日志级别,默认为logging.WARNING
    stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略
    

    把日志打印到文件上和屏幕上

    import logging
    logger = logging.getLogger("simple_example")
    logger.setLevel(logging.DEBUG)
    # 建立一个filehandler来把日志记录在文件里,级别为debug以上
    fh = logging.FileHandler("spam.log")
    fh.setLevel(logging.DEBUG)
    # 建立一个streamhandler来把日志打在CMD窗口上,级别为error以上
    ch = logging.StreamHandler()
    ch.setLevel(logging.ERROR)
    # 设置日志格式
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    ch.setFormatter(formatter)
    fh.setFormatter(formatter)
    #将相应的handler添加在logger对象中
    logger.addHandler(ch)
    logger.addHandler(fh)
    # 开始打日志
    logger.debug("debug message")
    logger.info("info message")
    logger.warn("warn message")
    logger.error("error message")
    logger.critical("critical message")
    

    写个类封装一下

        #! /usr/bin/env python
        #coding=gbk
        import logging,os
    
    class Logger:
     def __init__(self, path,clevel = logging.DEBUG,Flevel = logging.DEBUG):
      self.logger = logging.getLogger(path)
      self.logger.setLevel(logging.DEBUG)
      fmt = logging.Formatter('[%(asctime)s] [%(levelname)s] %(message)s', '%Y-%m-%d %H:%M:%S')
      #设置CMD日志
      sh = logging.StreamHandler()
      sh.setFormatter(fmt)
      sh.setLevel(clevel)
      #设置文件日志
      fh = logging.FileHandler(path)
      fh.setFormatter(fmt)
      fh.setLevel(Flevel)
      self.logger.addHandler(sh)
      self.logger.addHandler(fh)
     
     def debug(self,message):
      self.logger.debug(message)
     
     def info(self,message):
      self.logger.info(message)
     
     def war(self,message):
      self.logger.warn(message)
     
     def error(self,message):
      self.logger.error(message)
     
     def cri(self,message):
      self.logger.critical(message)
     
    if __name__ =='__main__':
     logyyx = Logger('yyx.log',logging.ERROR,logging.DEBUG)
     logyyx.debug('一个debug信息')
     logyyx.info('一个info信息')
     logyyx.war('一个warning信息')
     logyyx.error('一个error信息')
     logyyx.cri('一个致命critical信息')
    
    
    
    **实例化**
    
       logobj = Logger(‘filename',clevel,Flevel)
  • 相关阅读:
    js基础
    装饰模式,代理模式,继承
    Retrofit源码解析
    Android Studio自定义Plugin
    EMV笔记:持卡人认证(CVM)
    阿里代码规范笔记
    文章博客网址收集
    MultiDex解析
    EMV随记(1)
    RSA笔记
  • 原文地址:https://www.cnblogs.com/wspblog/p/6566776.html
Copyright © 2011-2022 走看看