logging是python标准库中的模块,用于给程序添加日志,借此方便我们回溯程序的执行过程。
基本用法
以下面代码为例,介绍logging模块的基本用法:
import logging logging.basicConfig(filename="example.log", filemode="a", format="%(levelname)s:%(message)s", level=logging.DEBUG) logging.debug(">>>>>Log Message: %s, %s" % ("Hello", "I'm debug log")) logging.info(">>>>>Log Message: %s, %s" % ("Hello", "I'm info log")) logging.warning(">>>>>Log Message: %s, %s" % ("Hello", "I'm warning log")) logging.error(">>>>>Log Message: %s, %s" % ("Hello", "I'm error log")) logging.critical(">>>>>Log Message: %s, %s" % ("Hello", "I'm critical log"))
该段代码会把日志输出到名为"example.log"的文件中,并规定了日志的输出格式及最低日志级别,输出结果如下:
DEBUG:>>>>>Log Message: Hello, I'm debug log INFO:>>>>>Log Message: Hello, I'm info log WARNING:>>>>>Log Message: Hello, I'm warning log ERROR:>>>>>Log Message: Hello, I'm error log CRITICAL:>>>>>Log Message: Hello, I'm critical log
日志级别
logging模块中初始定义了五个日志级别,如表格所示。由上到下,级别对应的严重程度依次增加。在文章开头的例子中,我们调用logging.basicConfig()配置了想要输出的日志最低级别为DEBUG,这意味着DEBUG及其以上等级的日志都会被输出。同理,如果我们只想输出ERROR及以上的日志,则令level=logging.ERROR即可。
级别 |
何时使用 |
---|---|
|
细节信息,仅当诊断问题时适用。 |
|
确认程序按预期运行 |
|
表明有已经或即将发生的意外(例如:磁盘空间不足)。程序仍按预期进行 |
|
由于严重的问题,程序的某些功能已经不能正常执行 |
|
严重的错误,表明程序已不能继续执行 |
LogRecord属性
在logging.basicConfig()中,我们使用了format="%(levelname)s:%(message)s"来规定日志的输出格式。其中levelname和message都是LogRecord属性,它们能出现在format字符串中,令输出结果带上了日志等级名、日志消息。其他可以出现在format字符串中的内容,参见下表:
属性名称 |
格式 |
描述 |
---|---|---|
args |
不需要格式化。 |
The tuple of arguments merged into |
asctime |
|
Human-readable time when the |
created |
|
Time when the |
exc_info |
不需要格式化。 |
Exception tuple (à la |
filename |
|
Filename portion of |
funcName |
|
Name of function containing the logging call. |
levelname |
|
Text logging level for the message ( |
levelno |
|
Numeric logging level for the message ( |
lineno |
|
Source line number where the logging call was issued (if available). |
message |
|
The logged message, computed as |
module |
|
模块 ( |
msecs |
|
Millisecond portion of the time when the |
msg |
不需要格式化。 |
The format string passed in the original logging call. Merged with |
name |
|
Name of the logger used to log the call. |
pathname |
|
Full pathname of the source file where the logging call was issued (if available). |
process |
|
进程ID(如果可用) |
processName |
|
进程名(如果可用) |
relativeCreated |
|
Time in milliseconds when the LogRecord was created, relative to the time the logging module was loaded. |
stack_info |
不需要格式化。 |
Stack frame information (where available) from the bottom of the stack in the current thread, up to and including the stack frame of the logging call which resulted in the creation of this record. |
thread |
|
线程ID(如果可用) |
threadName |
|
线程名(如果可用) |
输出方式
在logging.basicConfig()中,我们使用了filename="example.log", filemode="a"来令日志输出至某个文件。如果不带filename和filemode参数,则会把日志直接打印出来。filemode参数值默认为"a",意味着在原有日志的基础上,追加写新的日志;如果不想追加写新的日志,而是覆盖原有的日志,令filemode="w"即可。
最后说明,本篇文章只对logging模块的基本用法做了介绍,logging模块还有更多强大的功能供使用,可以通过官方文档了解。
参考资料