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
  • 相关阅读:
    HDU 2196 Computer
    HDU 1520 Anniversary party
    POJ 1217 FOUR QUARTERS
    POJ 2184 Cow Exhibition
    HDU 2639 Bone Collector II
    POJ 3181 Dollar Dayz
    POJ 1787 Charlie's Change
    POJ 2063 Investment
    HDU 1114 Piggy-Bank
    Lca hdu 2874 Connections between cities
  • 原文地址:https://www.cnblogs.com/gdjlc/p/11416581.html
Copyright © 2011-2022 走看看