Skip to content

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

@korryu3

Description

@korryu3

Originally posted by @korryu3 in #30 (comment)

発端

エラーが起きた際のデバッグを楽にするために、Pythonの標準ライブラリであるloggingと、Azure Application Insights(以下、AAI)に接続できるハンドラーを使用してログを残そうとしていた。

バグについて

FastAPI内で、別モジュールで定義されているloggerを呼び出す関数を叩くとなぜかAAIにlogが送られない。
例)

# app.py
from sub import log_info
@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に送信される
  1. 別モジュールで定義しているloggerと自モジュールで定義されているloggerが混合してしまっているのでは?
    A. いいえ。正常にモジュール毎に定義されてます。ログのレベル別で確認した結果、きちんと別れてました。

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

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

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

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

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

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

Desktop (please complete the following information):

  • OS: MacBook Air
  • Browser: Edge
  • Version: 14.3

その他

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

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

Metadata

Metadata

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions