Python3进阶篇(四)——log日志模块
Python3进阶篇(四)——log日志模块
前言:
软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。
1 日志等级
python自带日志模块 logging
,通过在代码中添加 import logging
使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。
1 | import logging |
Python3进阶篇(四)——log日志模块
前言:
软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。
1 日志等级
python自带日志模块 logging
,通过在代码中添加 import logging
使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。
1 | import logging |
可以发现 DEBUG
和 INFO
两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING
以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL 。
- DEBUG(调试): 用于开发调试;
- INFO(信息): 用于记录程序的运行过程中的重要信息;
- WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
- ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
- CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。
以上输出日志代码也可改为以下形式,结果等效。
1 | import logging |
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日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行配置 |
3 日志处理等级
&emps;要让所有的日志等级输出,需要将日志处理等级设置为 DEBUG
。
1 | import logging |
更灵活的用法是日志输出可以像c/c++中 printf
函数那样,支持变长参数。
1 | logging.log(logging.INFO, "info: Val: %d", 10) |
4 日志格式
默认的日志格式为 日志级别:日志器名称:日志内容
,日志器名称默认为 root
。以下代码可对日志格式进行修改。
1 | logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s') |
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 日志发生时间,日志格式为年-月-日 时:分:秒 |
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 |
message | %(message)s | 日志记录文本内容,为msg % args |
pathname | %(pathname)s | 日志发生的文件全路径 |
filename | %(filename)s | 日志发生的文件名,包含文件后缀 |
module | %(module)s | 日志发生的文件名,不含后缀 |
lineno | %(lineno)d | 日志发生的行号 |
funcName | %(funcName)s | 日志发生的函数名 |
process | %(process)d | 进程ID |
processName | %(processName)s | 进程名称 |
thread | %(thread)d | 线程ID |
threadName | %(threadName)s | 线程名称 |
可以发现 DEBUG
和 INFO
两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING
以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL 。
- DEBUG(调试): 用于开发调试;
- INFO(信息): 用于记录程序的运行过程中的重要信息;
- WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
- ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
- CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。
以上输出日志代码也可改为以下形式,结果等效。
1 | import logging |
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日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行配置 |
3 日志处理等级
&emps;要让所有的日志等级输出,需要将日志处理等级设置为 DEBUG
。
1 | import logging |
Python3进阶篇(四)——log日志模块
前言:
软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。
1 日志等级
python自带日志模块 logging
,通过在代码中添加 import logging
使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。
1 | import logging |
可以发现 DEBUG
和 INFO
两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING
以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL 。
- DEBUG(调试): 用于开发调试;
- INFO(信息): 用于记录程序的运行过程中的重要信息;
- WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
- ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
- CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。
以上输出日志代码也可改为以下形式,结果等效。
1 | import logging |
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日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行配置 |
3 日志处理等级
&emps;要让所有的日志等级输出,需要将日志处理等级设置为 DEBUG
。
1 | import logging |
更灵活的用法是日志输出可以像c/c++中 printf
函数那样,支持变长参数。
1 | logging.log(logging.INFO, "info: Val: %d", 10) |
4 日志格式
默认的日志格式为 日志级别:日志器名称:日志内容
,日志器名称默认为 root
。以下代码可对日志格式进行修改。
1 | logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s') |
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 日志发生时间,日志格式为年-月-日 时:分:秒 |
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 |
message | %(message)s | 日志记录文本内容,为msg % args |
pathname | %(pathname)s | 日志发生的文件全路径 |
filename | %(filename)s | 日志发生的文件名,包含文件后缀 |
module | %(module)s | 日志发生的文件名,不含后缀 |
lineno | %(lineno)d | 日志发生的行号 |
funcName | %(funcName)s | 日志发生的函数名 |
process | %(process)d | 进程ID |
processName | %(processName)s | 进程名称 |
thread | %(thread)d | 线程ID |
threadName | %(threadName)s | 线程名称 |
更灵活的用法是日志输出可以像c/c++中 printf
函数那样,支持变长参数。
1 | logging.log(logging.INFO, "info: Val: %d", 10) |
4 日志格式
默认的日志格式为 日志级别:日志器名称:日志内容
,日志器名称默认为 root
。以下代码可对日志格式进行修改。
1 | logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s') |
Python3进阶篇(四)——log日志模块
前言:
软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。
1 日志等级
python自带日志模块 logging
,通过在代码中添加 import logging
使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。
1 | import logging |
可以发现 DEBUG
和 INFO
两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING
以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL 。
- DEBUG(调试): 用于开发调试;
- INFO(信息): 用于记录程序的运行过程中的重要信息;
- WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
- ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
- CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。
以上输出日志代码也可改为以下形式,结果等效。
1 | import logging |
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日志记录 |
logging.basicConfig(**kwargs) | 对root logger进行配置 |
3 日志处理等级
&emps;要让所有的日志等级输出,需要将日志处理等级设置为 DEBUG
。
1 | import logging |
更灵活的用法是日志输出可以像c/c++中 printf
函数那样,支持变长参数。
1 | logging.log(logging.INFO, "info: Val: %d", 10) |
4 日志格式
默认的日志格式为 日志级别:日志器名称:日志内容
,日志器名称默认为 root
。以下代码可对日志格式进行修改。
1 | logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s') |
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 日志发生时间,日志格式为年-月-日 时:分:秒 |
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 |
message | %(message)s | 日志记录文本内容,为msg % args |
pathname | %(pathname)s | 日志发生的文件全路径 |
filename | %(filename)s | 日志发生的文件名,包含文件后缀 |
module | %(module)s | 日志发生的文件名,不含后缀 |
lineno | %(lineno)d | 日志发生的行号 |
funcName | %(funcName)s | 日志发生的函数名 |
process | %(process)d | 进程ID |
processName | %(processName)s | 进程名称 |
thread | %(thread)d | 线程ID |
threadName | %(threadName)s | 线程名称 |
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime | %(asctime)s | 日志发生时间,日志格式为年-月-日 时:分:秒 |
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 |
message | %(message)s | 日志记录文本内容,为msg % args |
pathname | %(pathname)s | 日志发生的文件全路径 |
filename | %(filename)s | 日志发生的文件名,包含文件后缀 |
module | %(module)s | 日志发生的文件名,不含后缀 |
lineno | %(lineno)d | 日志发生的行号 |
funcName | %(funcName)s | 日志发生的函数名 |
process | %(process)d | 进程ID |
processName | %(processName)s | 进程名称 |
thread | %(thread)d | 线程ID |
threadName | %(threadName)s | 线程名称 |