私がやりたいことは、Azure 関数アプリで opencensus-azure ハンドラーを使用しようとすることです。
環境:
- Win10
- パイソン3.7
サンプルコードは次のとおりです。
import logging
import os
import azure.functions as func
from opencensus.ext.azure.log_exporter import AzureLogHandler
log_extra = {
'custom_dimensions': {
'InvocationId': 1234321,
}
}
logger = logging.getLogger(__name__)
if logger.hasHandlers():
logger.handlers.clear()
# TODO: replace the all-zero GUID with your instrumentation key.
logger.addHandler(AzureLogHandler(
connection_string=f'InstrumentationKey={os.environ.get("APPINSIGHTS_INSTRUMENTATIONKEY", None)}')
)
print(123)
def main(req: func.HttpRequest) -> func.HttpResponse:
print(logger.handlers)
logger.debug('debug msg', extra=log_extra)
logger.info('info msg', extra=log_extra)
logger.warning('warning msg', extra=log_extra)
logger.error('error msg', extra=log_extra)
logger.critical('critical msg', extra=log_extra)
logger.fatal('fatal msg', extra=log_extra)
return func.HttpResponse("received", status_code=200)
関数をトリガーした後、アプリケーション インサイトで結果を確認します。
ここに私を混乱させるいくつかのポイントがあります:
- 「DEBUG」よりも高いログ レベルのログ メッセージが 3 回繰り返されます。それ以外は2回。
- グローバル スコープの print() も 2 回繰り返されます
さらに、ログハンドラーをチェックしようとします。ハンドラーは 1 つだけ存在します。
[<AzureLogHandler (NOTSET)>]
次に、コードを Azure 関数アプリにデプロイします。ログは次のとおりです。
いくつかの点に注意する必要があります:
- 「DEBUG」よりも高いログ レベルのロギング メッセージが 2 回繰り返されます。それ以外の場合は表示されません。
- グローバルのprint()は1回しか表示されません(予想どおり)
詳細を調べて、同じログ メッセージでログ エントリの customDimension を確認します。
これは、自動生成されたコンテンツを示しています。
これlog_extra
は私のコードを示しています:
すべての重複を削除する方法について何か提案はありますか?
これらの状況が引き起こした理由は?