トレースバックは、コードの複数行から成ります。あなたはGitPythonライブラリを使用して、これらの線のそれぞれに対してgit blame
から情報を抽出することができます。
import sys
import traceback
from git import Repo
def commit_info(file_path, line_number):
for commit, lines in Repo().blame('HEAD', file_path):
line_number -= len(lines)
if line_number <= 0:
return commit.hexsha, commit.committed_datetime, commit.author.name
try:
raise Exception('error')
except Exception:
for filename, line_number, _, _ in traceback.extract_tb(sys.exc_info()[2]):
print filename, line_number, commit_info(filename, line_number)
その後、それはあなたが歩哨にこの情報を送信する方法をあなた次第です。可能な解決策の一つ一つが、上記のリストのコミットを選択するとextra
キーワードを使用して、ロガーがあなたのために仕事をさせている。
try:
raise Exception
except Exception:
commit = choose_one_commit()
logger.exception('Error', extra={'author': author.name, 'sha': commit.hexsha})
また、あなたはこのextra
パラメータを追加することになり、独自のロガーを使用することができますすべて.exception()
、.error()
および.critical()
が呼び出されます。
全体的には、どのような動作を達成したいのか非常に曖昧であり、すべてが可能です。しかし、git blame
を呼び出すのは高価で、アプリケーションのパフォーマンスが大きく低下する可能性があります。
これはSentryの機能リクエストのようですが、質問はしませんか? – georgexsh
@georgexsh私はsentryが持っているすべての機能を知っていないので、機能の要求や質問を区別することはできません。 – guettli
タイトルや本文に少なくとも1つの疑問符を含めることができると思います。 – DJV