Django 中的日志记录

17 Mar 2025 | 6 分钟阅读

开发者在开发过程中都会遇到 bug,并且解决 bug 需要花费一些时间。

当我们知道实际问题,并且在错误发生时,这会更有帮助。这意味着 Python 的错误消息相当有帮助。

在本教程中,我们将讨论日志模块以及如何在 Django 中实现它。该模块提供了许多优点。作为 Django 开发者,掌握日志记录至关重要。Django 为各种日志框架和模块提供了出色的支持。

让我们从对日志模块的简要介绍开始。

什么是日志记录?

日志记录是一种技术,它允许开发者在软件执行时跟踪某些事件。它是开发者的重要工具。日志记录有助于维护软件,并充当开发者的额外眼睛。

它跟踪所有时间发生的每个事件。在实现日志模块后,我们可以轻松找到哪个部分抛出了错误。此方法允许我们快速解决错误。

它是如何工作的?幕后

一个单独的程序处理日志记录,而该日志记录程序本质上是一个文件写入器。日志记录器会以文本格式记录某些事件。记录的信息然后保存在文件中。这些文件称为日志,并以 log 扩展名保存。它们包含发生的事件的日志。

Python 提供了 logging 模块,其中包含额外的功能。我们将讨论 logging 模块的各种功能。logging 模块可以处理以下任务:

  • 多线程执行。
  • 通过不同的日志级别对消息进行分类。
  • 它更加灵活和可配置。
  • 提供更结构化的信息。

如果您想了解更多关于 logging 模块的信息,请访问我们的 Python 中的日志模块 教程。

日志模块的组件

日志模块主要有四个组件。我们将分别讨论每个组件。

  • 日志记录器 (Loggers)

开发者处理日志记录器;它与被调用时会调用的函数相同。当我们调用该函数时,它会提供详细的报告。日志记录器可以生成多个级别的响应。

我们还可以根据需要对其进行修改。

  • 处理程序(Handlers)

处理程序用于生成信息。它就像一家传播信息的报纸。我们可以通过在日志文件中提及信息来实现这一点(默认行为)。logging 模块提供了许多处理程序。

同一个日志记录器可以实现多个处理程序。还提供了 SMTP 处理程序,可以为我们邮寄日志记录。处理程序通常包含记录日志信息的业务逻辑。

  • 过滤器

过滤器(Filters)用于处理从日志记录器传递到处理程序的日志记录。顾名思义,它会过滤消息。可以有多个处理程序来处理多个消息。默认情况下,任何满足日志级别要求的日志消息都将被处理。

我们可以在日志记录器和处理程序上使用过滤器。

  • 格式化程序(Formatters)

格式化程序用于格式化数据。处理程序的问题在于它们无法将信息作为 Python 数据类型发送。要发送此类信息,我们需要先进行转换。

日志默认采用 Log Record 格式,logging 模块已预定义。我们可以直接通过互联网或以文本文件的形式发送信息。要转换格式,我们需要格式化程序。

Django 中的日志记录

登录模块可以轻松地在 Django 中实现和配置。

要使用 Django 中的日志记录器,我们需要遵循以下步骤。

  • settings.py 文件将配置各种日志记录器、处理程序和过滤器。
  • 我们需要将日志记录器的代码包含在 views 或 Django 的任何其他模块中。

让我们开始在 Django 中使用日志记录器的过程。

创建新项目

日志记录器可以实现在现有项目中。但是,您可以创建一个新项目以更好地理解它。使用以下命令在 Django 中创建新项目。

上面的命令将创建项目。现在,我们将配置 settings.py 项目。

配置设置

这是在 Django 中实现日志记录器的第一步。配置 settings.py 非常简单。我们需要定义以下内容:

  • 日志记录器 (Loggers)
  • 处理程序(Handlers)
  • 过滤器
  • 格式化程序(Formatters)

我们使用 **dictConfig 方法**,尽管还有其他方法可用。但 dictConfig 方法是 Django 的默认方法。复制以下代码并粘贴到 settings.py 中。

让我们分解上面的代码:

这段代码可能看起来很长很复杂,但很容易理解。我们有一个来自 Django 的内置变量 **LOGGING**。由于我们正在使用一个称为 **dictConfig** 方法的字典来配置设置。日志记录的默认值来自此字典。

以下是 **LOGGING** 字典中包含的一些重要键。

以下是 **LOGGING** 字典中的一些重要键。

  1. 版本
  2. disable_existing_loggers
  3. handlers
  4. loggers

version 键指定模式版本。它有一个值,默认值为 1。

下一个键是 **disable_exiting_loggers**,它指定不要禁用日志记录器。默认情况下,Django 自带日志记录器。这些日志记录器与 Django ORM 和 Django 的内部部分相关联。默认情况下,该键为 true,因此它会禁用这些日志记录器。

第三个键是 **Handlers**。如上所述,处理程序处理消息并将其传递到控制台、文件等。处理程序本身是一个字典。处理程序的名称作为字典键定义。日志记录器提供了许多处理程序,但我们将在此处使用两个处理程序。

1. FileHandler:logger-name -filehandler

FileHandler 将日志存储在文件中。如您在上面的代码中所见,我们将文件名指定为 **javatpoint-debug.log**。日志文件通常以 **.log** 扩展名存储。我们需要有权限对其进行更改。

2. StreamHandler:logger name - console

StreamHandler 会在控制台上流式传输日志。不建议使用此方法。命令行显示日志有一个字符限制。对于大型日志数据,我们需要文件处理程序。

还有更多处理程序,如 **mailhandlers、AdminEmailHandlers** 等。

日志记录器将记录服务器或软件信息。日志记录器也是字典类型。它具有与处理程序类似的架构。但是,有不同的属性和其他属性。

Django 附带了一组日志记录器,如 **django、django.requests** 等。

现在输入以下命令并按 Enter 键。

这将创建一系列日志,这是由于默认的 debug 级别。所有这些日志实际上都来自默认日志记录器的消息。我们也可以在连续的文件中创建自定义日志记录器。正如我们在下图中所看到的,javatpoint-debug.log 文件已被创建,并且它包含了所有日志记录。

Loggers in Django

将记录大量日志 bug 或警告或更高级别的通知。

结论

日志记录是开发者的重要工具。如果程序员正确实现它,它可以降低复杂性并节省大量时间。日志处理程序可以轻松处理日志,并使跟踪事件(无论是否发生以及原因)变得容易。