是否可以获取有关气流on_failure_callback
的异常详细信息?
我注意到它不是context
的一部分。我想创建一个通用的异常处理机制,该机制将有关错误的信息(包括有关异常的详细信息)发布到Slack。现在,我已经设法触发/执行回调并将其发布到Slack,但是无法发布异常详细信息。
谢谢。
答案 0 :(得分:0)
我认为可能无法在回调内部获取异常详细信息。 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)
答案 1 :(得分:0)
答案 2 :(得分:0)
on_failure_callback
可以提供给DAG和/或单个任务。
在第一种情况(提供给DAG的情况)中,'exception'
中没有context
(参数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()