gdjlc

培养良好的习惯,每天一点一滴的进步,终将会有收获。

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

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

 

posted on 2019-08-27 10:08  gdjlc  阅读(386)  评论(0编辑  收藏  举报