获取当前的 InvocationId 或 operation_Id
Get current InvocationId or operation_Id
有没有办法用custom_dimensions
得到一个完整的输出日志?我在(Azure Functions 的)监视器选项卡中看到仅显示带有 operation_Id
和 customDimensions['InvocationId']
的消息。有没有办法将这两个参数添加到来自 opencensus 的所有日志消息中?
我知道你可以 use a second logger。但这仅有助于调试。对于 运行 生产中的 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]
找到 right part in the documentation 后,出奇地简单:
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
之外的任何其他名称都会导致我出错 -.-
有没有办法用custom_dimensions
得到一个完整的输出日志?我在(Azure Functions 的)监视器选项卡中看到仅显示带有 operation_Id
和 customDimensions['InvocationId']
的消息。有没有办法将这两个参数添加到来自 opencensus 的所有日志消息中?
我知道你可以 use a second logger。但这仅有助于调试。对于 运行 生产中的 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]
找到 right part in the documentation 后,出奇地简单:
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
之外的任何其他名称都会导致我出错 -.-