Open KorRyu3 opened 8 months ago
Originally posted by @KorRyu3 in https://github.com/KorRyu3/TriPal/issues/30#issuecomment-1938126400
エラーが起きた際のデバッグを楽にするために、Pythonの標準ライブラリであるloggingと、Azure Application Insights(以下、AAI)に接続できるハンドラーを使用してログを残そうとしていた。
FastAPI内で、別モジュールで定義されているloggerを呼び出す関数を叩くとなぜかAAIにlogが送られない。 例)
logger
# app.py @app.get("/") def index(): log_info() # この呼び出しで"log info"がAAIに送信されているはずだが、送信されない return # sub.py from opencensus.ext.azure.log_exporter import AzureLogHandler logger = logging.getLogger(__name__) logger.addHandler(AzureLogHandler()) def log_info(): logger.info("log info")
そもそもAzureLogHandlerが送れていないのでは? A. いいえ。ログ自体は送れます。Azureでtripalのworkspaceのログを見ると確認できます。(AppTracesとAppExceptions)
AzureLogHandler
別モジュールからloggerを呼び出すのがダメなのでは? A. いいえ。別モジュールで定義していても、きちんと呼び出せます。
クラスに定義しているとlogger.infoは呼び出せないのでは? A. いいえ。きちんと呼び出せます。コンストラクタに定義しても正常に呼び出せました。
logger.info
FastAPIの中でloggerを呼び出すのがダメなのでは? A. いいえ。自分のモジュールに定義されているloggerは正常に動きます。
logger = logging.getLogger(__name__) # app.py @app.get("/") def index(): logger.info("log info") # これはきちんとAAIに送信される
別モジュールで定義しているloggerと自モジュールで定義されているloggerが混合してしまっているのでは? A. いいえ。正常にモジュール毎に定義されてます。ログのレベル別で確認した結果、きちんと別れてました。
app.py噛ませずにtripalgpt.py単体で動かしたらどうなる? A. 正常に動作して、全てきちんと送信されます。こうなるとFastAPIに問題があるとしか思えません。
logレベルが間違ってるんじゃ? A. いいえ。全てINFO以上で実験しているため正常です。
WebSocketが悪いんじゃね? A. いいえ。"/"でも動作しないので確率は低いかと。
logging.basicConfig(handlers=[AzureLogHandler()])とやれば解決できると記述があるが? A. 関数外だと普通に送信できますが、FastAPIのデコレータ(@appが上についてる関数)の中ではなぜかAAIに送信されませんでした。なんで????
logging.basicConfig(handlers=[AzureLogHandler()])
@app
app.pyで定義したloggerをすべてのモジュールでインポートして使い回せばいいのでは? A. 出来るけど汚いから正直やりたくない... 手段の一つとしてはあり。やるならファイルハンドラーは別のloggerを定義する。
app.py
別モジュールのloggerをFastAPI内で動かそうとすると送れない! A. 多分これが原因?
Desktop (please complete the following information):
10に書いてある妥協以外に方法が思いつかない。 ↑ 無理だった。
本当に意味不明なバグ。 エラーが出ないバグが一番困る。
原因はこれでほぼ確定かなぁ...
まぁ原因分かったところで解決法は不明なままなんだけどね。
Originally posted by @KorRyu3 in https://github.com/KorRyu3/TriPal/issues/30#issuecomment-1938126400
発端
エラーが起きた際のデバッグを楽にするために、Pythonの標準ライブラリであるloggingと、Azure Application Insights(以下、AAI)に接続できるハンドラーを使用してログを残そうとしていた。
バグについて
FastAPI内で、別モジュールで定義されている
logger
を呼び出す関数を叩くとなぜかAAIにlogが送られない。 例)バグの可能性(検証済みの事)
そもそも
AzureLogHandler
が送れていないのでは? A. いいえ。ログ自体は送れます。Azureでtripalのworkspaceのログを見ると確認できます。(AppTracesとAppExceptions)別モジュールからloggerを呼び出すのがダメなのでは? A. いいえ。別モジュールで定義していても、きちんと呼び出せます。
クラスに定義していると
logger.info
は呼び出せないのでは? A. いいえ。きちんと呼び出せます。コンストラクタに定義しても正常に呼び出せました。FastAPIの中でloggerを呼び出すのがダメなのでは? A. いいえ。自分のモジュールに定義されているloggerは正常に動きます。
別モジュールで定義しているloggerと自モジュールで定義されているloggerが混合してしまっているのでは? A. いいえ。正常にモジュール毎に定義されてます。ログのレベル別で確認した結果、きちんと別れてました。
app.py噛ませずにtripalgpt.py単体で動かしたらどうなる? A. 正常に動作して、全てきちんと送信されます。こうなるとFastAPIに問題があるとしか思えません。
logレベルが間違ってるんじゃ? A. いいえ。全てINFO以上で実験しているため正常です。
WebSocketが悪いんじゃね? A. いいえ。"/"でも動作しないので確率は低いかと。
logging.basicConfig(handlers=[AzureLogHandler()])
とやれば解決できると記述があるが? A. 関数外だと普通に送信できますが、FastAPIのデコレータ(@app
が上についてる関数)の中ではなぜかAAIに送信されませんでした。なんで????app.py
で定義したloggerをすべてのモジュールでインポートして使い回せばいいのでは? A. 出来るけど汚いから正直やりたくない... 手段の一つとしてはあり。やるならファイルハンドラーは別のloggerを定義する。別モジュールのloggerをFastAPI内で動かそうとすると送れない! A. 多分これが原因?
Desktop (please complete the following information):
その他
10に書いてある妥協以外に方法が思いつかない。↑ 無理だった。本当に意味不明なバグ。 エラーが出ないバグが一番困る。