3

我的团队使用Sentry跟踪错误,因此我不希望使用 Luigi 的内置电子邮件功能将我们所有的报告保存在一个地方。

这就是我目前的设置方式,它似乎完全跳过了 Sentry:

if __name__ == '__main__':
    try:
        luigi.run()
    except Exception as e:
        client = Client(
            ***
        )
        client.captureException(tags={
            sys.argv[0]
        })
        logger.critical('Error occurred: {e}'.format(e=e))
        raise
4

1 回答 1

5

我认为如果您声明对失败事件的回调并在那里进行哨兵跟踪,这应该是可能的:

import luigi

@luigi.Task.event_handler(luigi.Event.FAILURE)
def mourn_failure(task, exception):
    client = Client(
        ***
    )
    # we also include extra context for the current task
    client.captureException(
       (type(e), e.message, e.traceback),
       extra=dict(task=repr(task))
    )
    logger.critical('Error occurred: {e}'.format(e=exception))


if __name__ == '__main__':
    luigi.run()

如本答案中所述,e.traceback适用于 python 3+的注意事项。

于 2016-11-17T13:41:42.653 回答