首页 > 编程 > Python > 正文

python中 logging的使用详解

2020-02-16 10:27:57
字体:
来源:转载
供稿:网友

日志是用来记录程序在运行过程中发生的状况,在程序开发过程中添加日志模块能够帮助我们了解程序运行过程中发生了哪些事件,这些事件也有轻重之分。

根据事件的轻重可分为以下几个级别:

DEBUG: 详细信息,通常仅在诊断问题时才受到关注。整数level=10

INFO: 确认程序按预期工作。整数level=20

WARNING:出现了异常,但是不影响正常工作.整数level=30

ERROR:由于某些原因,程序 不能执行某些功能。整数level=40

CRITICAL:严重的错误,导致程序不能运行。整数level=50

默认的级别是WARNING,也就意味着只有级别大于等于的才会被看到,跟踪日志的方式可以是写入到文件中,也可以直接输出到控制台。

输出到控制台

下面是一个小例子通过将日志输出到控制台的方法:

import logginglogging.warning('Watch out!') # 将输出到控制台logging.info('I told you so') # 不会输出logging.error("an error occurrence!") #将输出到控制台

输出结果

WARNING:root:Watch out!ERROR:root:an error occurrence

输出到文件中

新开一个python解释器,确保不是上面代码的session

import logginglogging.basicConfig(filename='example.log',level=logging.DEBUG)logging.debug('This message should go to the log file')logging.info('So should this')logging.warning('And this, too')

这个时候控制台上面就没有了输出,文件example.log中的内容

DEBUG:root:This message should go to the log fileINFO:root:So should thisWARNING:root:And this, too

假定需要手动调整日志的级别,我们可以在命令行以参数的形式传入--log=INFO,在代码中可以采用下面的处理方式

# 输入参数 --log=DEBUG or --log=debugnumeric_level = getattr(logging, loglevel.upper(), None)#返回10,否则Noneif not isinstance(numeric_level, int): raise ValueError('Invalid log level: %s' % loglevel)logging.basicConfig(level=numeric_level, ...)

变量的日志

使用格式化字符串的方式,为变量添加日志

import logginglogging.warning('%s before you %s', 'Look', 'leap!')

自定义日志格式

我们还可以根据我们的需求自定义输出模板

import logginglogging.basicConfig(format='%(asctime)s: %(levelname)s: %(message)s',level=logging.DEBUG)logging.debug('This message should appear on the console')logging.info('So should this')logging.warning('And this, too')

输出

2017-10-24 14:03:53,671: DEBUG: This message should appear on the console2017-10-24 14:03:53,690: INFO: So should this2017-10-24 14:03:53,694: WARNING: And this, too

内部实际传入的为一个字典,%(key)为字典的key。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表