Python3进阶篇(四)——log日志模块

前言:
  软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。

1 日志等级

  python自带日志模块 logging ,通过在代码中添加 import logging 使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。

1
2
3
4
5
6
7
import logging

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

Python3进阶篇(四)——log日志模块

前言:
  软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。

1 日志等级

  python自带日志模块 logging ,通过在代码中添加 import logging 使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。

1
2
3
4
5
6
7
import logging

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

logging.png

  可以发现 DEBUGINFO 两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING 以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL

  • DEBUG(调试): 用于开发调试;
  • INFO(信息): 用于记录程序的运行过程中的重要信息;
  • WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
  • ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
  • CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。

  以上输出日志代码也可改为以下形式,结果等效。

1
2
3
4
5
6
7
import logging

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

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
2
3
4
5
6
7
8
9
import logging

logging.basicConfig(level = logging.DEBUG)

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

logging_all.png

  更灵活的用法是日志输出可以像c/c++中 printf 函数那样,支持变长参数。

1
logging.log(logging.INFO, "info: Val: %d", 10)

4 日志格式

  默认的日志格式为 日志级别:日志器名称:日志内容 ,日志器名称默认为 root 。以下代码可对日志格式进行修改。

1
2
3
4
5
6
7
logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s')

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

Fmt.png

字段/属性名称 使用格式 描述
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 线程名称

  可以发现 DEBUGINFO 两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING 以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL

  • DEBUG(调试): 用于开发调试;
  • INFO(信息): 用于记录程序的运行过程中的重要信息;
  • WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
  • ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
  • CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。

  以上输出日志代码也可改为以下形式,结果等效。

1
2
3
4
5
6
7
import logging

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

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
2
3
4
5
6
7
8
9
import logging

logging.basicConfig(level = logging.DEBUG)

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

Python3进阶篇(四)——log日志模块

前言:
  软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。

1 日志等级

  python自带日志模块 logging ,通过在代码中添加 import logging 使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。

1
2
3
4
5
6
7
import logging

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

logging.png

  可以发现 DEBUGINFO 两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING 以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL

  • DEBUG(调试): 用于开发调试;
  • INFO(信息): 用于记录程序的运行过程中的重要信息;
  • WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
  • ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
  • CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。

  以上输出日志代码也可改为以下形式,结果等效。

1
2
3
4
5
6
7
import logging

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

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
2
3
4
5
6
7
8
9
import logging

logging.basicConfig(level = logging.DEBUG)

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

logging_all.png

  更灵活的用法是日志输出可以像c/c++中 printf 函数那样,支持变长参数。

1
logging.log(logging.INFO, "info: Val: %d", 10)

4 日志格式

  默认的日志格式为 日志级别:日志器名称:日志内容 ,日志器名称默认为 root 。以下代码可对日志格式进行修改。

1
2
3
4
5
6
7
logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s')

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

Fmt.png

字段/属性名称 使用格式 描述
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
2
3
4
5
6
7
logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s')

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

Python3进阶篇(四)——log日志模块

前言:
  软件调试的一大利器就是输出日志,多年前看到大佬调试软件,终端密密麻麻输出五颜六色的日志就觉得很高大上,羡慕不已。这篇文章带你学会使用python的日志模块。

1 日志等级

  python自带日志模块 logging ,通过在代码中添加 import logging 使用日志模块。该日志模块支持按不同等级输出日志。以下代码为logging的5种日志等级输出。

1
2
3
4
5
6
7
import logging

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

logging.png

  可以发现 DEBUGINFO 两个等级的日志信息没有输出,这是因为logging模块默认只输出 WARNING 以上的日志等级。logging的日志等级优先级为 DEBUG < INFO < WARNING < ERROR < CRITICAL

  • DEBUG(调试): 用于开发调试;
  • INFO(信息): 用于记录程序的运行过程中的重要信息;
  • WARNING(警告): 记录某些不应该发生的错误信息,但错误等级最低,及时忽略它程序也能正常运行;
  • ERROR(错误): 记录严重的错误异常信息,该类错误是不能被忽视的;
  • CRITICAL(严重): 最高等级的错误,为重大错误,该类错误发生时程序无法正常运行也无法自行恢复。

  以上输出日志代码也可改为以下形式,结果等效。

1
2
3
4
5
6
7
import logging

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

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
2
3
4
5
6
7
8
9
import logging

logging.basicConfig(level = logging.DEBUG)

logging.log(logging.DEBUG, "debug")
logging.log(logging.INFO, "info")
logging.log(logging.WARNING, "warning")
logging.log(logging.ERROR, "error")
logging.log(logging.CRITICAL, "critical")

logging_all.png

  更灵活的用法是日志输出可以像c/c++中 printf 函数那样,支持变长参数。

1
logging.log(logging.INFO, "info: Val: %d", 10)

4 日志格式

  默认的日志格式为 日志级别:日志器名称:日志内容 ,日志器名称默认为 root 。以下代码可对日志格式进行修改。

1
2
3
4
5
6
7
logging.basicConfig(level = logging.DEBUG, format = '[%(levelname)s] - [%(filename)s <%(lineno)s>](%(funcName)s): %(message)s')

logging.debug("debug")
logging.info("info")
logging.warning("warning")
logging.error("error")
logging.critical("critical")

Fmt.png

字段/属性名称 使用格式 描述
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 线程名称