日志部署

日志

日志记录是任何生产环境的关键方面。Prefect公开了一系列用于自定义日志行为的配置设置和实用函数。

添加日志

可能想添加其他日志的最常见位置是自定义task中。可以在两个位置访问task的logger,具体取决于创建task的方式:

  • 如果task是作为Task基类的子类实现的,则self.logger属性包含Task基类的logger

  • 如果task是通过@task装饰器实现的,则可以从上下文访问logger:logger=prefect.context.get("logger")

配置

Prefect用户配置文件提供了一种在本地运行时轻松更改显示日志的方式。在用户配置文件中,添加具有以下结构的日志记录部分:

[logging]
# The logging level: NOTSET, DEBUG, INFO, WARNING, ERROR, or CRITICAL
level = "INFO"

# The log format
format = "[%(asctime)s] %(levelname)s - %(name)s | %(message)s"

另外,可以设置以下环境变量:

export PREFECT__LOGGING__LEVEL="INFO"
export PREFECT__LOGGING__FORMAT="[%(asctime)s] %(levelname)s - %(name)s | %(message)s"

添加处理器

除了更改日志格式外,还可以通过在执行之前直接与logger对象进行交互来使日志满足更多需要。例如,可以将新的处理器添加到logger中(注意日志处理器允许将日志发送到多个可配置的目标位置)。

这可以通过位于prefect.utilities.logging中的get_logger实用程序轻松完成。可以通过不带任何参数的get_logger()来访问根logger。注意task logger和flow logger分别与名称为“task”和“flow”的logger相关联。

例子

让我们来看一个基本的例子。首先,我们将在本地计算机上创建一个虚拟Web服务器,并将日志发布到:

接下来,创建一个logger处理器,并将该处理器添加到task的日志对象中。

如果我们将此代码存储在名为logging_example.py的文件中,则可以使用环境变量更新日志格式和级别,并开始以下流程运行:

像往常一样,我们应该看到日志发布到stdout。但是,如果导航到运行Web服务器的窗口,则还会看到类似以下内容:

我们看到501状态代码,因为我们的网络服务器未实现任何路由。

进一步

可以通过此示例进一步为日志创建真正的存储解决方案来。此外如果在Prefect Cloud上运行,则可以选择Prefect存储日志,并通过方便的GraphQL接口访问日志!

Last updated

Was this helpful?