在上一篇中我们介绍了在 IPython 中使用 mpi4py,下面我们将介绍一个使用 mpi4py 实现的并行日志工具 —— python-mpi-logger。
在介绍 python-mpi-logger 之前,我们先简要地介绍一下日志的概念和其作用以及 Python 标准库提供的日志纪录 logging 模块,因为 python-mpi-logger 也是处于 logging 模块框架之下的。
日志(log)
日志(log)是一种可以追踪某些软件运行时所发生事件的方法。软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情。一个事件可以用一个包含可选变量数据的消息来描述。此外,事件也有重要性的概念,这个重要性也可以被称为严重性级别(level)。
通过日志的分析,可以方便用户了解系统或软件、应用的运行情况;如果你的应用日志足够丰富,也可以分析以往用户的操作行为、类型喜好、地域分布或其他更多信息;如果一个应用的日志同时也分了多个级别,那么可以很轻易地分析得到该应用的健康状况,及时发现问题并快速定位、解决问题,补救损失。简单来讲就是,我们通过记录和分析日志可以了解一个系统或软件程序运行情况是否正常,也可以在应用程序出现故障时快速定位问题。
日志的作用可以简单总结为以下3点:
- 程序调试;
- 了解软件程序运行情况,是否正常;
- 软件程序运行故障分析与问题定位。
Python logging 模块
Python 标准库中的 logging 模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。logging 模块是 Python 的一个标准库模块,由标准库模块提供日志记录 API 的好处是所有 Python 模块都可以使用这个日志记录功能。所以,你的应用日志可以将你自己的日志信息与来自第三方模块的信息整合起来。
logging 模块包含的一些基本类有:
- Logger 对象:提供应用直接使用的日志接口;
- Handler 对象:发送日志纪录(由 Logger 对象产生)到合适的目的地;
- Filter 对象:精细地控制哪些日志纪录会最终被输出;
- Formatter 对象:控制最终输出的日志纪录的格式。
下面给出 logging 模块中主要类和模块级别函数的使用接口,更详细的介绍请参考其文档。
Logger 类
注意:一般并不直接初始化一个 Logger 类对象,而是使用模块级别函数 logging.getLogger(name) 来产生一个新的或者返回一个已经存在的 Logger 对象。
下面是其主要方法接口:
Logger.setLevel(level)
设定日志等级为 level
。那些等级比 level
低的日志消息将会被忽略掉。下面是预定义的日志等级及其对应的数值:
等级 | 数值 |
---|---|
CRITICAL | 50 |
ERROR | 40 |
WARNING | 30 |
INFO | 20 |
DEBUG | 10 |
NOTSET | 0 |
Logger.debug(msg, *args, **kwargs)
以 DEBUG 等级