Python的日志功能
Posted gdjlc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\\Work\\Projects\\python\\test1.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:\\Work\\Projects\\python\\test1.py", line 27, in <module> divide(1/0) ZeroDivisionError: division by zero
以上是关于Python的日志功能的主要内容,如果未能解决你的问题,请参考以下文章
Atitit php java python nodejs错误日志功能的比较
怎么用Python + Flask框架实现Web应用实现日志记录功能?