【发布时间】:2019-01-20 03:59:16
【问题描述】:
有什么方法可以获取气流on_failure_callback上的异常详细信息?
我注意到它不是context 的一部分。我想创建一个通用的异常处理机制,将有关错误的信息发布到 Slack,包括有关异常的详细信息。我现在已经成功触发/执行回调并发布到 Slack,但无法发布异常详细信息。
谢谢。
【问题讨论】:
标签: airflow
有什么方法可以获取气流on_failure_callback上的异常详细信息?
我注意到它不是context 的一部分。我想创建一个通用的异常处理机制,将有关错误的信息发布到 Slack,包括有关异常的详细信息。我现在已经成功触发/执行回调并发布到 Slack,但无法发布异常详细信息。
谢谢。
【问题讨论】:
标签: airflow
on_failure_callback 可以提供给 DAG 和/或单个任务。
在第一种情况下(提供给 DAG),context 中没有 'exception'(参数 Airflow 调用您的 on_failure_callback)。
在第二种情况下(提供给任务),有。
包含的对象应该是 python Exception。
从中获取堆栈跟踪之类的东西令人惊讶地不直观,但是从this answer 我使用以下内容来获取相当可读的堆栈跟踪:
import traceback
...
exception = context.get('exception')
formatted_exception = ''.join(
traceback.format_exception(etype=type(exception),
value=exception, tb=exception.__traceback__
)
).strip()
【讨论】:
【讨论】:
None。
我认为可能无法在回调中获取异常详细信息。 Look at the source code
# Handling callbacks pessimistically
try:
if self.state == State.UP_FOR_RETRY and task.on_retry_callback:
task.on_retry_callback(context)
if self.state == State.FAILED and task.on_failure_callback:
task.on_failure_callback(context)
except Exception as e3:
logging.error("Failed at executing callback")
logging.exception(e3)
【讨论】: