📁
prefect.docs
  • 介绍
  • 入门
    • 安装
    • Task和Flow
    • 触发器、关联task和信号
    • 为什么是Prefect
    • 为什么不是Airflow
  • 初级教程
    • ETL介绍
    • Prefect实现ETL
    • 使用Parameters
    • 失败处理
    • 调度执行
    • 水平扩展
    • task更多特性
  • 核心概念
    • Task.任务
    • Flow.流
    • Parameter.参数
    • State.状态
    • Engine.引擎
    • Execution.执行
    • Logging.日志
    • Mapping.映射
    • 通知和状态处理器
    • 持久化缓存
    • 结果对象和结果处理器
    • Schedule.调度计划
    • Secret.秘钥
    • Configuration.配置
    • 最佳实践
    • 常见问题
  • task库
    • Airtable
    • AWS.亚马逊云
    • Azure.微软云
    • Azure ML Service.微软云机器学习
    • Collection.集合
    • Constant.常量
    • Control Flow.控制流
    • Docker
    • Dropbox
    • Email
    • Function.函数
    • GCP.谷歌云
    • GitHub
    • Kubernetes
    • Operators.运算符
    • Postgres
    • Redis
    • RSS
    • Shell
    • Slack
    • Snowflake
    • SQLite
    • Strings.字符串
    • Twitter
  • 进阶教程
    • task映射并行和Prefect参数的高级特性
    • Prefect算子
    • 日志部署
    • Dask部署
    • ETL
    • 本地调试
    • Slack通知
    • Prefect Task剖析
    • 动态DAG和Task循环
    • 结果处理器
    • 工作流可视化
  • 样例
    • 概览
    • Airflow DAG
    • Task缓存
    • 按日收集github状态
    • ETL工作流
    • 工作流状态可视化
    • Docker Pipeline的函数式API
    • Github双周发布周期
    • Docker Pipeline的命令式API
    • 简易Map/Reduce
    • 参数化条件
    • 重试和映射
    • spaCy自然语言处理
    • 状态处理日志
    • Task循环
    • 发数据表至Airtable
  • 开发Issues
    • 内容提要
    • PIN-1:PINs介绍
    • PIN-2:数据处理器和元数据
    • PIN-3:执行环境
    • PIN-4:结果对象
    • PIN-5:组合Tasks
    • PIN-6:删除常量Tasks
    • PIN-7:存储和执行
    • PIN-8:事件驱动工作流
    • PIN-9:Prefect命令行
    • PIN 10:弹性调度计划
    • PIN 11:Task循环
    • PIN 12:环境回调
    • PIN 13:云部署
    • PIN-14:进阶事件驱动工作流
    • PIN-15:丢弃状态和信号
    • PIN-16:结果和目标
  • 开发规范
    • 概览
    • 编码风格
    • 文档注释
    • 测试
    • 贡献代码
    • 版本更新列表
    • 突破
  • 常见疑问
  • 开源社区
  • 代码贡献指南
Powered by GitBook
On this page
  • 日志配置
  • Prefect内置Logger
  • task记录日志
  • task类
  • task装饰器
  • 日志输出
  • 其他Logger库

Was this helpful?

  1. 核心概念

Logging.日志

日志配置

Prefect具有多种从task生成日志的方式。

Prefect内置Logger

Prefect的日志级别由prefect.config.logging.level控制,默认为INFO。但是设置只会影响Prefect内置logger对象,而不是Python全局的logger对象。

要更改默认日志级别,请设置环境变量PREFECTLOGGINGLEVEL=DEBUG。

task记录日志

要访问Prefect配置的logger对象,请使用prefect.utilities.logging.get_logger(<名称可选>)。如果你不提供名称,将收到Prefect的根logger对象。

task类

在task类里面使用self.logger:

class MyTask(prefect.Task):
    def run(self):
        self.logger.info("An info message.")
        self.logger.warning("A warning message.")

task装饰器

在@task装饰器生成的task的实例运行里,从上下文获取logger:

@task
def my_task():
    logger = prefect.context.get("logger")

    logger.info("An info message.")
    logger.warning("A warning message.")

确保仅在task运行时访问上下文

运行task时,将填充Prefect上下文信息。因此,仅应在task运行时访问上下文的logger对象。例如,将无法工作的一个实例:

logger = prefect.context.get("logger")

@task
def my_task():

    logger.info("An info message.")
    logger.warning("A warning message.")

日志输出

Prefect的task本身就支持将标准输出的输出转发到logger对象。可以通过在task上设置log_stdout=True来启用此功能。

@task(log_stdout=True)
def log_my_stdout():
    print("I will be logged!")

其他Logger库

当使用日志配置时,可以设置许多其他库(例如boto3和snowflake.connector)发出自己的内部日志。你甚至可以为团队使用具有相同日志功能提供内部共享库。

如果通过标准日志库执行此操作,则可以执行以下操作:

import logging
import sys
for l in ['snowflake.connector', 'boto3', 'custom_lib']:
    logger = logging.getLogger(l)
    logger.setLevel('INFO')
    log_stream = logging.StreamHandler(sys.stdout)
    log_stream.setFormatter(LOG_FORMAT)
    logger.addHandler(log_stream)

鉴于Prefect已经提供了一种配置本地日志和云日志记录的方法,你可以使用这些第三方的日志库,以使它们继承Prefect日志记录配置以在本地流传输并显示在云端。

为了使其正常工作,你需要提供一个列表至prefect.config.logging.extra_loggers。

这是TOML配置的样子:

[logging]
# Extra loggers for Prefect log configuration
extra_loggers = "['snowflake.connector', 'boto3', 'custom_lib']"

当做环境变量配置:

export PREFECT__LOGGING__EXTRA_LOGGERS="['snowflake.connector', 'boto3', 'custom_lib']"
PreviousExecution.执行NextMapping.映射

Last updated 5 years ago

Was this helpful?

Prefect官网
英版原文
联系译者