使用OpenCensus将Django日志导出到Azure AppInsights

问题描述

我正在遵循DjangoAzure的指南。我可以获取依赖关系和请求,但无法获取踪迹。

我将此添加到了中间件:

'opencensus.ext.django.middleware.OpencensusMiddleware'

这是settings.py的LOGGING和OPENCENSUS部分。

LOGGING = {
'version': 1,'disable_existing_loggers': False,'formatters': {
    'default': {
        'format': '%(asctime)s - %(levelname)s - %(processName)s - %(name)s\n%(message)s',},"handlers": {
    "azure": {
        "level": "DEBUG","class": "opencensus.ext.azure.log_exporter.AzureLogHandler","instrumentation_key": assert_env('APPINSIGHTS_INSTRUMENTATIONKEY'),"console": {
        "level": "DEBUG","class": "logging.StreamHandler","formatter": "default","loggers": {
    "logger_name": {"handlers": ["azure","console"]},# For some reason,this is needed or logging doesn't show up in the
    # celery log file.
'skyforge.tasks': {
    'handlers': ['azure','console'],'level': assert_env('DJANGO_LOG_LEVEL'),

}

OPENCENSUS = {
    'TRACE': {
        'SAMPLER': 'opencensus.trace.samplers.ProbabilitySampler(rate=1)','EXPORTER': '''opencensus.ext.azure.trace_exporter.AzureExporter(
            service_name='skyforge'
        )'''
        #Assumes Environmental Variable 'APPINSIGHTS_INSTRUMENTATIONKEY'
    }
}

有关在何处查找为什么没有跟踪日志的任何指导。 django-critical和django-tasks仍将进入控制台。

解决方法

这是错误的部分:

"loggers": {
"logger_name": {"handlers": ["azure","console"]},

"logger_name"必须使用应用名称填充 logger = logging.getLogger(__name__)工作正常。

记录器中还需要一个级别。

这对我有用。

LOGGING = {
'version': 1,'disable_existing_loggers': False,'formatters': {
    'default': {
        'format': '%(asctime)s - %(levelname)s - %(processName)s - %(name)s\n%(message)s',},'handlers': {
     'azure': {
        'class': 'opencensus.ext.azure.log_exporter.AzureLogHandler','formatter':'default'
        # https://pypi.org/project/opencensus-ext-azure/
        #Assumed ENV APPLICATIONINSIGHTS_CONNECTION_STRING
      },'console': {
        'class': 'logging.StreamHandler','formatter': 'default','loggers': {
    'polls': {
        'handlers': ['azure','console'],'level':'DEBUG'
        },}

}

以下选项没有区别: 处理程序中的'level'参数 'filter':'[]'在处理程序中 'stream':sys.stdout在处理程序中。

我将Appinsights连接字符串放在一个环境变量中,但是参考文献还显示了如何将其放置在设置中。同样,设置中的原始键似乎也可以使用。

APPLICATIONINSIGHTS_CONNECTION_STRING=InstrumentaionKey=<key uuid>