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的日志功能的主要内容,如果未能解决你的问题,请参考以下文章

Python的日志功能

Atitit php java python nodejs错误日志功能的比较

怎么用Python + Flask框架实现Web应用实现日志记录功能?

python内置函数print输出到文件,实现日志记录的功能

python 装饰器

python基础学习日志day8-实现进度条功能,for和yield实现