日志处理模块logging
logging模块
logging模块用于记录事件,错误,警告和调试信息。
日志记录级别
级别 | 值 | 描述 |
---|---|---|
CRITICAL | 50 | 关键错误/消息 |
ERROR | 40 | 错误 |
WARNING | 30 | 警告 |
INFO | 20 | 通知消息 |
DEBUG | 10 | 调试 |
NOTSET | 0 | 无级别 |
基本配置:
在使用logging模块中的任意函数前,应该首先执行根记录器(root logger)的一些基本配置,根记录器负责管理日志消息的默认行为。
basicConfig([**kwargs]) # 此函数用于配置,应该在进行其他日志记录调用之前进行调用。
此函数接受以下关键字参数
关键字参数 | 描述 |
---|---|
filename | 将日志消息附加到指定文件名的文件 |
filemode | 指定用于打开文件的模式,默认使用模式'a'(附加) |
format | 用于生成日志消息的格式字符串 |
datafmt | 用于输出日期和时间的格式字符串 |
level | 设定根记录器的级别,级别等于或大于此级别的所有日志消息都将被处理,低于此级别的消息将被静默忽略。 |
stream | 提供打开的文件,用于把日志消息发送到其中,默认的流是sys.stderr,此参数不能与filename参数同时使用。 |
format中的格式
格式 | 描述 |
---|---|
%(name)s | 记录器的名称 |
%(levelno)s | 数字形式的日志记录级别 |
%(levelname)s | 日志记录级别的文本名称 |
%(pathname)s | 执行日志记录调用的源文件的路径名称 |
%(filename)s | 执行日志记录调用的源文件的文件名 |
%(funcName)s | 执行日志记录调用的函数名称 |
%(module)s | 执行日志记录调用的模块名称 |
%(lineno)d | 执行日志记录调用的行号 |
%(created)f | 执行日志记录时的时间,它的值是time.time()返回的数字 |
%(asctime)s | 执行日志记录调用时的ASCII格式的日期和时间 |
%(msecs)s | 执行日志记录调用时的时间的毫秒部分 |
%(thread)d | 线程ID |
%(threadName)s | 线程名称 |
%(process)d | 进程ID |
%(message)s | 记录的消息 |
示例
import logging
logging.basicConfig(
filename = "app.log",
format = "%(levelname) - 10s %(asctime)s %(message)s"
level = logging.INFO
为了发出日志消息,必须获得Logger对象
1、 创建Logger对象
用法:getLogger([logname]) # 不管存在与否,都返回与名称logname相关的Logger实例
示例:logger = getLogger("default")
在内部,getLogger()方法使用一块缓存来存放Logger实例及其相关名称,如果程序的其他部分请求名称相同的记录器,就会返回以前创建的实例。
2、 发出日志消息
实例化一个Logger对象取名log
日志记录级别 | 方法
------------ | ---------
CRITICAL | log.critical('message')
ERROR | log.error('message')
WARNING | log.warning(...)
INFO | log.info(...)
DEBUG | log.debug(...)
示例
log = logging.getLogger("app")
# 使用位置格式化的日志消息
log.critical("Can't connect to %s at port %d, host, port)
# 使用字典格式化的信息
params = {
'host' : 'www.python.org',
'port' : 80
}
log.critical("Can't connect to %(host)s at port %(port)d", params)