zoukankan      html  css  js  c++  java
  • python logging模块

    logging支持的日志五个级别

    • debug() 调试级别,一般用于记录程序运行的详细信息
    • info() 事件级别,一般用于记录程序的运行过程
    • warnning() 警告级别,,一般用于记录程序出现潜在错误的情形
    • error() 错误级别,一般用于记录程序出现错误,但不影响整体运行
    • critical 严重错误级别 , 出现该错误已经影响到整体运行

    logging.basicConfig函数

    实例代码:

    logging.basicConfig(level=logging.DEBUG, format="%(asctime)s|%(levelname)s|%(filename)s:%(lineno)s|%(message)s",
                                datefmt="%Y-%m-%d %H:%M:%S")
    name = '张三'
    age = 18
    logging.debug("姓名 %s, 年龄 %d, ", name, age)
    logging.warning("姓名 %s, 年龄 %d, ", name, age)

    输出:

    2020-12-16 10:54:02|DEBUG|log.py:66|姓名 张三, 年龄 18, 
    2020-12-16 10:54:02|WARNING|log.py:67|姓名 张三, 年龄 18, 

    主要可以对日志的输出格式及方式做相关配置支持的参数由:

    • 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,可选 logging.DEBUG logging.INFO logging.WARNING logging.ERROR logging.CRITICAL
    • stream: 指定将日志的输出流,可以指定输出到sys.stderr,sys.stdout或者文件,默认输出到sys.stderr,当stream和filename同时指定时,stream被忽略

    logging工作流程:

    logging的四大组件

    • Loggers:记录器, 提供应用程序可直接使用的接口
    • Handlers :处理器,将记录器产生的日志发送至目的地
    • Filters:过滤器,提供了过滤日志信息的方法
    • Formatters:格式化器, 指定日志显示格式

    组件分析:

    • Loggers:记录器

      1.提供调用程序的调用接口

      logger = logging.getLogger(__name__)

      logger是单例的

      2. 决定日志记录的级别

      logger.setLevel()

      3. 将日志内容传递到相关联的handlers中

      logger.addHandler()和logger.removeHandler()

    • Handlers处理器

        将日志分发到不同的目的地。可以是文件、标准输出、邮件、或者通过socket、http等协议发送到任何地方。

        StreamHandler

          标准输出stdout(如显示器)分发器

            创建方法:sh = logging.StreamHandler(stream=None)

        FileHandler

          将日志保存到磁盘文件的处理器。

          创建方法:fh=logging.FileHandler(filename, mode=‘a’,encoding=None, delay=False)

          setFormatter():设置当前handler对象使用的消息格式

    • Formatters格式

      Formatter对象用来最终设置日志信息的顺序、结构和内容

      其构造方法为

      Ft = logging.Formatter.__init__(fmt=None, datefmt=None, style=‘%’)

      Datefmt默认是%Y-%m-%d %H:%M:%S样式

      Style参数默认为百分符%,这表示%(<dictionary key>)s格式的字符串

     

    使用文件配置处理日志

    """ 配置文件的方式来处理日志"""
            # 载入配置文件的信息
            logging.config.fileConfig('logging.conf')
    
            rootLogger = logging.getLogger()
            rootLogger.debug("This is root Logger, debug")
    
            # 记录器
            logger = logging.getLogger('applog')
    
            logger.debug("This is applog, debug")
    
            a = 'abc'
            try:
                int(a)
            except Exception as e:
                logger.exception(e)

    logging.conf文件配置:

    [loggers]
    keys=root,applog
    
    [handlers]
    keys=fileHandler,consoleHandler
    
    [formatters]
    keys=simpleFormatter
    
    [logger_root]
    level=DEBUG
    handlers=consoleHandler
    
    [logger_applog]
    level=DEBUG
    handlers=fileHandler,consoleHandler
    qualname=applog
    propagate=0
    
    [handler_consoleHandler]
    class=StreamHandler
    args=(sys.stdout,)
    level=DEBUG
    formatter=simpleFormatter
    
    [handler_fileHandler]
    class=handlers.TimedRotatingFileHandler
    args=('applog.log', 'midnight',1,0)
    level=DEBUG
    formatter=simpleFormatter
    
    [formatter_simpleFormatter]
    format=%(asctime)s|%(levelname)8s|%(filename)s[:%(lineno)d]|%(message)s
    datefmt=%Y-%m-%d %H:%M:%S

    参考链接:https://www.jb51.net/article/184398.htm

    https://blog.csdn.net/qq_34182808/article/details/100735895

    https://cloud.tencent.com/developer/section/1369394 ★

    https://www.jb51.net/article/190556.htm ★

    https://blog.csdn.net/yy19890521/article/details/80990175 

  • 相关阅读:
    zmap zgrab 环境搭建
    RF是如何工作的?
    RF的优缺点
    国内NLP的那些人那些会
    B-、B+、B*树
    关于LDA的gibbs采样,为什么可以获得正确的样本?
    LDA算法里面Dirichlet分布的两个参数alpha和beta怎样确定?
    如何确定LDA的主题个数
    SMO算法精解
    奇异值与主成分分析(PCA)
  • 原文地址:https://www.cnblogs.com/leoych/p/14143049.html
Copyright © 2011-2022 走看看