0

私がやりたいことは、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は私のコードを示しています:

ここに画像の説明を入力


すべての重複を削除する方法について何か提案はありますか?

これらの状況が引き起こした理由は?

4

0 に答える 0