日志记录是程序员工具箱中非常有用的工具。它可以帮助您更好地理解程序的流程,并发现您在开发时可能没有想到的场景。
Python 的日志模块
Python 中的日志模块是一个开箱即用且功能强大的模块。大多数第三方 Python 库都使用它来构建日志功能。
我们可以在 Python 程序中简单的导入日志模块:
import logging
导入日志模块后,我们可以简单的使用 logging
来记录你想要查看的信息。
默认情况下,有5个标准级别来表示事件的严重程度,这五个级别按照严重性从低到高依次如下:
- DEBUG
- INFO
- WARNING
- ERROR
- CRITICAL
日志模块提供了一个默认的 logger
,无语配置即可使用。
import logging
logging.debug('这是一个调试消息')
logging.info('这是一个 info 消息')
logging.warning('这是一个 warning 消息')
logging.error('这是一个n error 消息')
logging.critical('这是一个 critical 消息')
输出如下:
WARNING:root:这是一个 warning 消息
ERROR:root:这是一个n error 消息
CRITICAL:root:这是一个 critical 消息
输出显示每条消息之前的严重性级别以及root,root 这是日志记录模块为其默认 logger 提供的名称。
我们看到:debug()
和info()
消息没有被记录。
这是因为,默认情况下,日志记录模块会记录严重级别为 WARNING 或更高级别的消息。
基本配置
我们可以使用 basicConfig(**kwargs)
方法,该方法有如下参数:
level
:根记录器将设置为指定的严重性级别。filename
:指定文件。filemode
:如果filename给定,文件以此模式打开。默认为a
,表示追加。format
:这是日志消息的格式。
通过 level 指定日志级别
通过使用该level参数,可以设置要记录的日志消息的级别(通常使用 logging 的常量来指定)。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug('调试消息也会被输出')
DEBUG:root:调试消息也会被输出
现在,所有DEBUG
级别或DEBUG
级别以上的事件都将被记录。
指定日志文件
同样,对于记录到文件而不是控制台,可以使用 file 相关参数。
import logging
logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('输出到文件的日志')
上面参数含义:
- filename:日志写入名为
app.log
的文件,而不是控制台 - filemode:设置文件模式为
w
,表示每次basicConfig()
调用时日志文件都以「写模式」打开,并且每次运行程序都会重写该文件- 默认配置是
a
,表示 append。
- 默认配置是
打开 app.log
可以看到:
root - ERROR - 输出到文件的日志
!!! note basicConfig() 只能调用一次
第一次调用basicConfig()
函数之后,后续调用会在 basicConfig() 在内部调用该函数
!!!
使用 format 格式化输出
使用%(process)d
记录进程 ID:
import logging
logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('这是一个 Warning 消息')
输出可能是这样的:
18973-WARNING-这是一个 Warning 消息
使用 %(asctime)s
记录日期和时间信息:
import logging
logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO)
logging.info('订单创建成功')
2023-12-01 20:22:05,388 - 订单创建成功
修改时间格式:
import logging
logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
logging.warning('订单创建成功')
2-Dec-12 20:13:11 - 订单创建成功
使用变量
我们还可以使用变量来快速格式化我们的消息:
import logging
name = '羊顶天'
logging.error('%s 摔了一个跟头', name)
ERROR:root: 羊顶天 摔了一个跟头
上面示例中我们使用, %s
参数,