获取当前InitationId或Operation_Id

有没有办法获得一个完整的输出日志custom_dimensions?我在(Azure Functions 的)监视器选项卡中看到,仅显示带有operation_Id和 的消息。customDimensions['InvocationId']有没有办法将这两个参数添加到 opencensus 的所有日志消息中?

我知道你可以使用第二个记录器。但这仅有助于调试。为了在生产中运行 Azure Functions,我需要查看这两个流。这是可能的,但效率低下且令人沮丧,因为信息是断开的并且无法总结。

然而,另一种选择是加入 Azure Monitor 端的流。InvocationId但除非我知道当前或 ,否则我不能这样做operation_Id。因此我的问题是我是否可以将这两个 ID 中的任何一个添加到我当前的日志消息中

我的最小示例__init__.py如下所示:

from opencensus.ext.azure.log_exporter import AzureLogHandler

import logging.config

import yaml


import azure.functions as func


# Load logging configuration

with open("logging.yaml", 'rt') as f: # for local debugging add the console handler to the output

    config_data = yaml.safe_load(f.read())

    logging.config.dictConfig(config_data)


def main(mytimer: func.TimerRequest) -> None:

    try: 

        someID = 14

        logging.debug('debug message',extra = {'custom_dimensions': {'ID': someID}})

        logging.info('info message',extra = {'custom_dimensions': {'ID': someID}})

        logging.warning('warn message',extra = {'custom_dimensions': {'ID': someID}})

        logging.error('error message',extra = {'custom_dimensions': {'ID': someID}})

        logging.critical('critical message',extra = {'custom_dimensions': {'ID': someID}})

    except Exception as e:

        logging.error("Main program failed with error: " + str(e))

我更喜欢将日志配置保存在logging.yaml:


version: 1

formatters:

  simple:

    format: '%(asctime)s | %(levelname)-8s | %(module)s:%(funcName)s:%(lineno)d | %(message)s'

handlers:

  azure:

    class: opencensus.ext.azure.log_exporter.AzureLogHandler

    level: DEBUG

    formatter: simple

    instrumentation_key: 'your-key'

loggers:

  simpleExample:

    level: DEBUG

    handlers: [azure]

    propagate: no

root:

  level: INFO

  handlers: [azure]


红颜莎娜
浏览 124回答 2
2回答

Cats萌萌

在文档中找到正确的部分后,事情变得非常简单:def main(mytimer: func.TimerRequest, context: func.Context) -> None:    try:         invocation_id = context.invocation_id        # Function continues here.     except Exception as e:        logging.error("Main program failed with error: " + str(e))请注意,此解决方案仅在func.Context分配给时才有效context。使用任何其他名称都会context给我带来错误 -.-

慕妹3242003

刚刚在此处添加了操作 ID,根据文档,Traceparent 的第二部分是 Trace_id,它将成为日志控制台中的操作 ID。def main(mytimer: func.TimerRequest, context: func.Context) -> None:    try:         invocation_id = context.invocation_id        traceparent = context.trace_context.Traceparent        try:            operation_id = f"{traceparent}".split('-')[1]        except IndexError as i_err:            # as a backup option             logging.exception(i_err)            operation_id = 'default_id'        except Exception as final_err:           logging.exception(final_err)           # Function continues here.     except Exception as e:        logging.error("Main program failed with error: " + str(e))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python