python log日志常用用法总结
非常感谢下面这篇博客的博主,翻译的很好,讲的非常全,如果大家想要系统的学一下,可以选择下面的文章。本文只是总结在实际应用中的常用方法和函数介绍。
日志输出
日志等级划分
- DEBUG 等级最低的,最详细的日志信息,典型应用场景是 问题诊断
- INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作
- WARNING 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的
- ERROR 由于一个更严重的问题导致某些功能不能正常运行时记录的信息
- CRITICAL 当发生严重错误,导致应用程序不能继续运行时记录的信息
总之,从上到下,日志等级越来越高
import logging
logging.debug('this is a debug')
logging.info('this is a info')
logging.warning('this is a warning')
logging.error('this is a error')
logging.critical('this is a critical')
out:
WARNING:root:this is a warning
ERROR:root:this is a error
CRITICAL:root:this is a critical
这里我们可以看到,我们上面写了五个不同级别的输出,但是在控制台的输出只有三个。其原因是logging模块默认的级别是
warning
,所以只能输出三个日志信息。
那我想都输出出来怎么办?来配置basicConfig()方法
logging.basicConfig()
从名字中,我们就能够看出,这是一个配置函数,首先介绍一下他的几个参数
- filename 指定日志输出目标文件的文件名,指定该设置项后日志信心就不会被输出到控制台了
-
filemod 指定日志文件的打开方式,默认为’a’ .
注:
模式a为在文件末尾追加。模式w是重新写入。 - format 指定日志格式字符串,下面会给出相应表格
- datefmt 指定日期/时间格式
- level 指定日志器的日志级别
- stream 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream,和filename冲突,二者只能设置一个
logging模块format格式字符串字段
这里我直接截取文章开头那篇博客的图
配置后的日志输出
- 输出到文件中
import logging
logging.basicConfig(filename='mylog.log',level=logging.DEBUG)
logging.debug('this is a debug')
logging.info('this is a info')
logging.warning('this is a warning')
logging.error('this is a error')
logging.critical('this is a critical')
mylog.log
DEBUG:root:this is a debug
INFO:root:this is a info
WARNING:root:this is a warning
ERROR:root:this is a error
CRITICAL:root:this is a critical
- 自定义格式
# 日志发生时间 - 日志级别 - 日志记录的内容
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(message)s'
logging.basicConfig(level=logging.DEBUG,format=LOG_FORMAT)
logging.debug('this is a debug')
logging.info('this is a info')
logging.warning('this is a warning')
logging.error('this is a error')
logging.critical('this is a critical')
out
2021-07-04 22:33:00,347 - DEBUG - this is a debug
2021-07-04 22:33:00,347 - INFO - this is a info
2021-07-04 22:33:00,347 - WARNING - this is a warning
2021-07-04 22:33:00,347 - ERROR - this is a error
2021-07-04 22:33:00,347 - CRITICAL - this is a critical
注意 LOG_FORMAT 中间的连接符号可以更换 比如
-、+、=
- 带有参数的日志信息
import logging
# 日志发生时间 - 日志级别 - 日志记录的内容
LOG_FORMAT = '%(asctime)s + %(levelname)s - %(message)s'
logging.basicConfig(level=logging.DEBUG,format=LOG_FORMAT)
a='ya'
b=11
logging.debug('this is a debug %s %d',a,b)
logging.info('this is a info')
logging.warning('this is a warning')
logging.error('this is a error')
logging.critical('this is a critical')
out
2021-07-04 22:40:31,262 + DEBUG - this is a debug ya 11
2021-07-04 22:40:31,262 + INFO - this is a info
2021-07-04 22:40:31,262 + WARNING - this is a warning
2021-07-04 22:40:31,262 + ERROR - this is a error
2021-07-04 22:40:31,262 + CRITICAL - this is a critical
参数类型通过%s、%d等来指定,然后后面直接接逗号跟着参数就行了
- 添加额外的独特的信息
比如在这个场景下,小组每个人负责不同的模块,最终组合运行的时候,需要给自己负责模块输出日志中,添加具有区分度的东西,比如自己的代号等等。
介绍三个参数:
-
exc_info:
其值为布尔值,如果该参数的值设置为True,则会将异常信息添加到日志消息中。如果没有异常信息则添加None到日志信息中。 -
stack_info:
其值也为布尔值,默认值为False。如果该参数的值设置为True,栈信息将会被添加到日志信息中。 -
extra:
这是一个字典(dict)参数,它可以用来自定义消息格式中所包含的字段,但是它的key不能与logging模块定义的字段冲突。
import logging
# 日志发生时间 - 日志级别 - - 名称 -日志记录的内容
LOG_FORMAT = '%(asctime)s - %(levelname)s - %(username)s - %(message)s'
logging.basicConfig(level=logging.DEBUG,format=LOG_FORMAT)
try:
b=1/0
except:
logging.error('this is a error',exc_info=True,extra={'username':'xing'})
logging.debug('this is a debug',exc_info=True,stack_info=True,extra={'username':'xing'})
logging.info('this is a info',exc_info=True,extra={'username':'xing'})
logging.warning('this is a warning',exc_info=True,extra={'username':'xing'})
logging.critical('this is a critical',exc_info=False,extra={'username':'xing'})
out
2021-07-04 23:04:32,548 - ERROR - xing - this is a error
Traceback (most recent call last):
File "C:/Users/test/yaml.py", line 8, in <module>
b=1/0
ZeroDivisionError: division by zero
2021-07-04 23:04:32,549 - DEBUG - xing - this is a debug
NoneType: None
Stack (most recent call last):
File "C:/Users/test/yaml.py", line 12, in <module>
logging.debug('this is a debug',exc_info=True,stack_info=True,extra={'username':'xing'})
2021-07-04 23:04:32,549 - INFO - xing - this is a info
NoneType: None
2021-07-04 23:04:32,549 - WARNING - xing - this is a warning
NoneType: None
2021-07-04 23:04:32,549 - CRITICAL - xing - this is a critical
从结果我们能够看到,error 输出下面,出现了异常信息,其他下面只是显示了NoneType:None,我们可以通过这样的手段,将异常信息进行捕获,然后再进行输出。
总结
基本上项目中常用的方法和函数都在这里,了解完这些,应该也就够用了。
版权声明:本文为lzx159951原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。