Python logging 库 记录日志
Python logging 库 记录日志
1 日志级别和记录日志
1.1 日志级别
| 日志等级(level) | 描述 |
|---|---|
| DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
| INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
| WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
| ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
| CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
日志等级是从上到下依次升高的,即:DEBUG < INFO < WARNING < ERROR < CRITICAL,而日志的信息量是依次减少的。
1.2 记录日志
记录日志的相关函数:
logging.debug(msg, *args, **kwargs) # 添加一条日志级别为 DEBUG 的日志记录
logging.info(msg, *args, **kwargs) # 添加一条日志级别为 INFO 的日志记录
logging.warning(msg, *args, **kwargs) # 添加一条日志级别为 WARNING 的日志记录
logging.error(msg, *args, **kwargs) # 添加一条日志级别为 ERROR 的日志记录
logging.critical(msg, *args, **kwargs) # 添加一条日志级别为 CRITICAL 的日志记录
logging.log(level, *args, **kwargs) # 添加一条日志级别为 level 的日志记录
主要参数:
msg (str):日志信息level:日志级别,可为logging.DEBUG,logging.INFO,logging.WARNING,logging.ERROR和logging.log。
其他参数:
exc_info (bool): 默认值为 False。如果设为 True,则会将异常信息添加到日志消息中。如果没有异常信息则添加 None 到日志信息中。stack_info (bool): 默认值为 False。如果设为 True,程序运行的栈信息将会被添加到日志信息中。extra (dict):用来自定义消息格式中所包含的字段,但是它的 key 不能与 logging 模块定义的字段冲突。
代码实例 1: 添加日志
import logging
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")
# 也可以这样写
logging.log(logging.DEBUG, "This is a debug log.")
logging.log(logging.INFO, "This is a info log.")
logging.log(logging.WARNING, "This is a warning log.")
logging.log(logging.ERROR, "This is a error log.")
logging.log(logging.CRITICAL, "This is a critical log.")
# Output: WARNING:root:This is a warning log.
# Output: ERROR:root:This is a error log.
# Output: CRITICAL:root:This is a critical log.
代码实例 2: exc_info,exc_info,extra 参数测试
logging.basicConfig(
level = logging.DEBUG,
format = "%(asctime)s - %(levelname)s - %(user)s[%(ip)s] - %(message)s",
datefmt = "%Y-%m-%d %H:%M:%S")
logging.warning(
"Some one delete the log file.",
exc_info = True,
stack_info = True,
extra = {'user': 'Tom', 'ip':'47.98.53.222'})
2 日志格式配置
2.1 logging.basicConfig() 函数
函数用于指定“要记录的日志级别”、“日志格式”、“日志输出位置”、“日志文件的打开模式” 等信息
注意:logging.basicConfig() 函数是一个一次性的简单配置工具使,也就是说只有在第一次调用该函数时会起作用,后续再次调用该函数时完全不会产生任何操作的,多次调用的设置并不是累加操作。
主要参数:
-
filename:指定日志输出目标文件的文件名,指定该设置项后日志信息就不会被输出到控制台了 -
filemode:指定日志文件的打开模式,默认为'a'(追加模式)。只有设置了filename参数时才有效 -
format:指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。 -
datefmt:指定日期/时间格式。只有在format中包含时间字段%(asctime)s时才有效 -
level:指定日志器的日志级别 -
stream:指定日志输出目标 stream,如 sys.stdout、sys.stderr 以及网络 stream。- 注意:
stream和filename参数不能同时提供,否则会引发 ValueError 异常
- 注意:
-
style:指定 format 格式字符串的风格,可取值为'%'、'{'和'$',默认为'%' -
handlers:该选项如果被指定,它应该是一个创建了多个 Handler 的可迭代对象,这些 handler 将会被添加到 root logger。- 注意:
filename、stream和handlers这三个参数只能有一个存在,不能同时出现 2 个或 3 个,否则会引发 ValueError 异常。
- 注意:
2.1.1 format 日志格式设置
| 字段/属性名称 |
使用格式 |
描述 |
|---|---|---|
| asctime | %(asctime)s | 日志事件发生的时间--人类可读时间,如:2003-07-08 16:49:45,896 |
| created | %(created)f | 日志事件发生的时间--时间戳,就是当时调用 time.time() 函数返回的值 |
| relativeCreated | %(relativeCreated)d | 日志事件发生的时间相对于logging模块加载时间的相对毫秒数(目前还不知道干嘛用的) |
| msecs | %(msecs)d | 日志事件发生事件的毫秒部分 |
| levelname | %(levelname)s | 该日志记录的文字形式的日志级别('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL') |
| levelno | %(levelno)s | 该日志记录的数字形式的日志级别(10, 20, 30, 40, 50) |
| name | %(name)s | 所使用的日志器名称,默认是'root',因为默认使用的是 rootLogger |
| message | %(message)s | 日志记录的文本内容,通过 msg % args计算得到的 |
| pathname | %(pathname)s | 调用日志记录函数的源码文件的全路径 |
| filename | %(filename)s | pathname 的文件名部分,包含文件后缀 |
| module | %(module)s | filename 的名称部分,不包含后缀 |
| lineno | %(lineno)d | 调用日志记录函数的源代码所在的行号 |
| funcName | %(funcName)s | 调用日志记录函数的函数名 |
| process | %(process)d | 进程ID |
| processName | %(processName)s | 进程名称 |
| thread | %(thread)d | 线程ID |
| threadName | %(thread)s | 线程名称 |
实例:
logging.basicConfig(
filename = 'test.log',
level = logging.DEBUG,
format = "%(asctime)s - %(levelname)s - %(message)s",
datefmt = "%Y-%m-%d %H:%M:%S")
logging.debug("This is a debug log.")
logging.info("This is a info log.")
logging.warning("This is a warning log.")
logging.error("This is a error log.")
logging.critical("This is a critical log.")
3. 日志流处理流程
3.1 logging日志模块的四大组件
| 组件名称 | 对应类名 | 功能描述 |
|---|---|---|
| 日志器 | Logger | 提供了应用程序可一直使用的接口 |
| 处理器 | Handler | 将logger创建的日志记录发送到合适的目的输出 |
| 过滤器 | Filter | 提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录 |
| 格式器 | Formatter | 决定日志记录的最终输出格式 |
参考资料
Python之日志处理(logging模块), 博客园, site

浙公网安备 33010602011771号