KorRyu3 / TriPal

LLM service that offers travel plans
3 stars 0 forks source link

Azure Application Insightsにデバッグ用ログが送れない #33

Open KorRyu3 opened 8 months ago

KorRyu3 commented 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が送られない。 例)

# 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")

バグの可能性(検証済みの事)

  1. そもそもAzureLogHandlerが送れていないのでは? A. いいえ。ログ自体は送れます。Azureでtripalのworkspaceのログを見ると確認できます。(AppTracesとAppExceptions)

  2. 別モジュールからloggerを呼び出すのがダメなのでは? A. いいえ。別モジュールで定義していても、きちんと呼び出せます。

  3. クラスに定義しているとlogger.infoは呼び出せないのでは? A. いいえ。きちんと呼び出せます。コンストラクタに定義しても正常に呼び出せました。

  4. FastAPIの中でloggerを呼び出すのがダメなのでは? A. いいえ。自分のモジュールに定義されているloggerは正常に動きます。

    logger = logging.getLogger(__name__)
    # app.py
    @app.get("/")
    def index():
    logger.info("log info")  # これはきちんとAAIに送信される
  5. 別モジュールで定義しているloggerと自モジュールで定義されているloggerが混合してしまっているのでは? A. いいえ。正常にモジュール毎に定義されてます。ログのレベル別で確認した結果、きちんと別れてました。

  6. app.py噛ませずにtripalgpt.py単体で動かしたらどうなる? A. 正常に動作して、全てきちんと送信されます。こうなるとFastAPIに問題があるとしか思えません。

  7. logレベルが間違ってるんじゃ? A. いいえ。全てINFO以上で実験しているため正常です。

  8. WebSocketが悪いんじゃね? A. いいえ。"/"でも動作しないので確率は低いかと。

  9. logging.basicConfig(handlers=[AzureLogHandler()])とやれば解決できると記述があるが? A. 関数外だと普通に送信できますが、FastAPIのデコレータ(@appが上についてる関数)の中ではなぜかAAIに送信されませんでした。なんで????

  10. app.pyで定義したloggerをすべてのモジュールでインポートして使い回せばいいのでは? A. 出来るけど汚いから正直やりたくない... 手段の一つとしてはあり。やるならファイルハンドラーは別のloggerを定義する。

  11. 別モジュールのloggerをFastAPI内で動かそうとすると送れない! A. 多分これが原因?

Desktop (please complete the following information):

その他

10に書いてある妥協以外に方法が思いつかない。 ↑ 無理だった。

本当に意味不明なバグ。 エラーが出ないバグが一番困る。

KorRyu3 commented 8 months ago

別モジュールのloggerをFastAPI内で動かそうとすると送れない!

原因はこれでほぼ確定かなぁ...

まぁ原因分かったところで解決法は不明なままなんだけどね。