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")
バグの可能性(検証済みの事)
-
そもそもAzureLogHandlerが送れていないのでは?
A. いいえ。ログ自体は送れます。Azureでtripalのworkspaceのログを見ると確認できます。(AppTracesとAppExceptions)
-
別モジュールからloggerを呼び出すのがダメなのでは?
A. いいえ。別モジュールで定義していても、きちんと呼び出せます。
-
クラスに定義しているとlogger.infoは呼び出せないのでは?
A. いいえ。きちんと呼び出せます。コンストラクタに定義しても正常に呼び出せました。
-
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に送信されませんでした。なんで????
-
app.pyで定義したloggerをすべてのモジュールでインポートして使い回せばいいのでは?
A. 出来るけど汚いから正直やりたくない... 手段の一つとしてはあり。やるならファイルハンドラーは別のloggerを定義する。
-
別モジュールのloggerをFastAPI内で動かそうとすると送れない!
A. 多分これが原因?
Desktop (please complete the following information):
- OS: MacBook Air
- Browser: Edge
- Version: 14.3
その他
10に書いてある妥協以外に方法が思いつかない。
↑ 無理だった。
本当に意味不明なバグ。
エラーが出ないバグが一番困る。
Originally posted by @korryu3 in #30 (comment)
発端
エラーが起きた際のデバッグを楽にするために、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に書いてある妥協以外に方法が思いつかない。↑ 無理だった。
本当に意味不明なバグ。
エラーが出ないバグが一番困る。