教你快速入门:Python Logging 使用指南

对程序员来说 , Logging 是一种非常重要的功能 。 无论调试程序还是程序运行时的信息显示 , Logging 都很有用 。 在本文中 , 我会演示为什么要使用以及如何使用 Python 中的 Logging 模块 。
为什么要使用 Logging 而不使用 print()print 语句跟 Logging 输出存在本质上的不同 。 一般地 , print 语句用于向 stdout(标准输出)写入有用的信息或程序需要输出的信息 。 然而 Logging 将这些信息写入 stderr(标准错误输出) 。
import logginglogging.basicConfig(level=logging.INFO) #We'll talk about this soon!logging.warning('Something bad could happen!')logging.info('You are running the program')logging.error('Aw snap! Everything failed.')print("This is the program output")复制代码如果我运行这段程序 , 可以看到命令行输出了如下信息 。
$ python log_test.pyWARNING:root:Something bad could happen!INFO:root:You are running the programERROR:root:Aw snap! Everything failed.This is the program output复制代码然而对于普通用户来说 , 信息太多了 。 虽然这些都在命令行显示 , 但数据却被分开了 。 所以用户应当这样运行程序 。
教你快速入门:Python Logging 使用指南文章插图
这里多说一句 , 小编是一名python开发工程师 , 这里有我自己整理了一套最新的python系统学习教程 , 包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等 。 想要这些资料的可以关注小编 , 并私信“01”即可领取 。
$ python log_test.py > program_output.txtWARNING:root:Something bad could happen!INFO:root:You are running the programERROR:root:Aw snap! Everything failed.$ cat program_output.txtThis is the program output复制代码在这里 , 需要输出的信息通过重定向符 > 写入到一个文件 。 所以我们能看到终端的运行情况 , 也可以方便地从文件中得到输出信息 。 现在我们来了解日志等级!
Logging 和日志等级需要使用 Logging 的原因各有不同 。 这些原因可以根据严重性的不同分为如下几类 。

  • DEBUG: 开发者调试信息 , 包括经计算得到的值、参数估值、URL、API 调用信息等 。
  • INFO: 一般性的信息 。
  • WARNING: 关于输入、参数等的警告 。
  • ERROR: 报告由于用户操作不当或程序运行时发生的错误 。
  • CRITICAL: 最高等级的日志输出 , 通常用于某些关键问题(取决于具体情况) 。
最常用的日志类型有:DEBUG、INFO 和 ERROR 。 然而 , 经常会出现因 Python 版本不匹配抛出警告的情况 。
教你快速入门:Python Logging 使用指南文章插图
配置 Logger 和日志处理程序Logger 可以配置不同的参数 , 可以配置特定日志等级、日志文件名、文件模式和日志打印的输出格式 。
配置 Logger 的参数【教你快速入门:Python Logging 使用指南】Logger 可采用如下配置 。
import logginglogging.basicConfig(filename='program.log', filemode='w', level=logging.DEBUG)logging.warning('You are given a warning!')复制代码上面的代码向 program.log 文件输出日志 。 filemode='w' 用于设置文件读写模式 。 filemode='w' 表示需要打开一个新文件并覆盖原来的内容 。 该参数默认设置为 'a' , 此时会打开相应文件 , 并追加日志内容 , 因为有时需要获取历史日志 。 表示等级的参数 level 用于确定日志的最低等级 。 例如 , 当设置 level 为 INFO , 程序就不会输出 DEBUG 级别的日志 。 你可能知道 , 需要设置 'verbose=debug' 才能获取一些参数 。 日志等级默认为 INFO 。
创建日志处理器虽然上述方法直接明了 , 满足了一个简单的应用程序的需求 , 但对于一个软件产品或服务来说 , 需要全面的日志处理流程 。 因为很难在数以百万计的 DEBUG 级日志中找到某个 ERROR 级日志 。 此外 , 在整个程序和模块中 , 我们应当使用单一的 Logger 。 这样我们就可以正确地把日志添加到同一文件中 。 所以我们可以使用具有不同配置的 Handler 来处理这种任务 。
import logginglogger = logging.getLogger("My Logger")logger.setLevel(logging.DEBUG)console_handler = logging.StreamHandler()file_handler = logging.FileHandler('file.log', mode='w')console_handler.setLevel(logging.INFO)file_handler.setLevel(logging.DEBUG)logger.addHandler(console_handler)logger.addHandler(file_handler)复制代码可以看出 , 我们首先通过名称获取到一个 Logger 。 以此可以在程序的其他任意地方使用同一个 Logger 。 我们把全局的 Logging 等级设为最低的 DEBUG , 这样我们就可以在其他日志处理器中设置任意日志等级 。