zoukankan      html  css  js  c++  java
  • Python的日志功能

    python自带的logging是日志处理模块,可以记录日志,并输出到控制台和文件等。
    日志分5个级别:
    DEBUG:调试信息,权重10
    INFO:一般信息,权重20
    WARNING:警告信息,权重30
    ERROR:错误信息,权重40
    CRITICAL:致命信息,权重50

    一、输出日志到控制台(默认情况)

    1、不设置日志级别,默认只输出WARNING及以上权重的信息

    import logging
    
    logging.debug('debug级别的信息')
    logging.info('info级别的信息')
    logging.warning('warning级别的信息')
    logging.error('error级别的信息')
    logging.critical('critical级别的信息')

    运行结果:

    WARNING:root:warning级别的信息
    ERROR:root:error级别的信息
    CRITICAL:root:critical级别的信息

    2、设置日志级别,可以输出级别及以上以上权重的信息
    如设置级别为INFO,不是只输出INFO,而是输出INFO、WARNING、ERROR、CRITICAL信息
    如设置级别为ERROR,输出ERROR、CRITICAL信息

    import logging
    
    logging.basicConfig(level=logging.INFO)
    
    logging.debug('debug级别的信息')
    logging.info('info级别的信息')
    logging.warning('warning级别的信息')
    logging.error('error级别的信息')
    logging.critical('critical级别的信息')

    运行结果:

    INFO:root:info级别的信息
    WARNING:root:warning级别的信息
    ERROR:root:error级别的信息
    CRITICAL:root:critical级别的信息

    3、格式化日志信息

    import logging
    
    LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
    DATE_FORMAT = "%Y-%m-%d %H:%M:%S" 
    #basicConfig只在第一次调用时起作用,后续再次调用无任何操作
    logging.basicConfig(level=logging.INFO, format=LOG_FORMAT, datefmt=DATE_FORMAT)
    
    logging.debug('debug级别的信息')
    logging.info('info级别的信息')

    运行结果:

    2019-08-27 09:07:30 - DEBUG - debug级别的信息
    2019-08-27 09:07:30 - INFO - info级别的信息

    format格式字符串的字段列表:

    二、同时输出日志到控制台、文件

    默认情况下只输出日志到控制台,可以通过handlers的列表参数只输出一种,或同时输出多种

    import logging
    
    LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
    DATE_FORMAT = "%Y-%m-%d %H:%M:%S" 
    fs = logging.StreamHandler() #输出日志到控制台
    fp = logging.FileHandler('log.txt', encoding='utf-8') #输出日志到文件
    logging.basicConfig(level=logging.DEBUG, format=LOG_FORMAT, datefmt=DATE_FORMAT, handlers=[fs, fp])
    
    logging.debug('debug级别的信息')
    logging.info('info级别的信息')

    三、记录异常信息日志

    记录异常信息日志,可以使用logging.exception

    import logging
    
    def divide(x, y):
        return x/y
    
    try:
        divide(1/0)
    except Exception as e:
        logging.exception(e)

    运行结果如下:

    ERROR:root:division by zero
    Traceback (most recent call last):
      File "E:WorkProjectspython	est1.py", line 27, in <module>
        divide(1/0)
    ZeroDivisionError: division by zero

    exception背后是调用error的,唯一的不同时,有一个默认参数exc_info=True。
    所以也可以logging.exception也可以换成logging.error 

    def divide(x, y):
        return x/y
        
    try:
        divide(1/0)
    except Exception as e:
        logging.error('执行函数divide出错', exc_info=True)

    运行结果:

    ERROR:root:执行函数divide出错
    Traceback (most recent call last):
      File "E:WorkProjectspython	est1.py", line 27, in <module>
        divide(1/0)
    ZeroDivisionError: division by zero
  • 相关阅读:
    Salesforce: 测试代码写在非测试类中
    Salesforce: 使用代码编辑日期时间
    测试用例练习
    DFA算法实现敏感词过滤
    基于redis实现分布式锁
    Python检查字符串之间的相似度
    二维码生成器
    MySQL 备份/恢复
    实现阿里云短信验证
    SnowFlake 生成唯一订单id
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11416581.html
Copyright © 2011-2022 走看看