Как получить ограниченную информацию в AppInsights через NLog?

#asp.net-core #azure-application-insights #nlog

#asp.net-ядро #azure-application-insights #nlog

Вопрос:

Рассмотрим следующий код в методе, в который ILogger<> вводится в конструктор:

 using (_logger.BeginScope("Requesting {page} for {identification}", page, identification))
{
    if (identification == null)
    {
        var test = "Test String";
        _logger.LogTrace("No identification present {test}. Presenting Index page", test);
        return Page();
    }

    _logger.LogDebug("Identification present: {identification}", identification);
}
  

Я вижу эту строку в AI:
введите описание изображения здесь

где я ожидал бы получить некоторую информацию о области видимости; хотя я не знаю, как это выглядит, но я предполагаю, что она добавлена к пользовательским размерам вдоль свойств LoggerName and test .

В моем классе запуска у меня есть это:

 public void ConfigureServices(IServiceCollection services)
{
    services.Configure<ApplicationInsightsServiceOptions>(Configuration.GetSection("ApplicationInsights"));
    services.AddApplicationInsightsTelemetry();
    LogManager.Configuration = new NLogLoggingConfiguration(Configuration.GetSection("NLog"));

    /// ... the reset
}
  

Мой appsettings.json выглядит так:

 {
  "Logging": {
    "IncludeScopes": true,
    "NLog": {
      "IncludeScopes": true
    },
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "ApplicationInsights": {
      "IncludeScopes": true,
      "LogLevel": {
        "Default": "Trace"
      }
    }
  },
  "NLog": {
    "autoReload": true,
    "throwConfigExceptions": true,
    "internalLogLevel": "trace",
    "internalLogFile": "${basedir}/internal-nlog.txt",
    "extensions": [
      {
        "assembly": "Microsoft.ApplicationInsights.NLogTarget"
      }
    ],
    "targets": {
      "aiTarget": {
        "type": "ApplicationInsightsTarget"
      },
      "logconsole": {
        "type": "ColoredConsole"
      }
    },
    "rules": [
      {
        "logger": "*",
        "minLevel": "Trace",
        "writeTo": "aiTarget, logconsole"
      }
    ]
  }
  

Есть ли что-то, чего мне не хватает …?

Ответ №1:

Я думаю, вы можете попробовать это:

     "targets": {
      "aiTarget": {
        "type": "ApplicationInsightsTarget",
        "contextproperties": [
        {
            "name": "scopecontext",
            "layout": {
                "type": "JsonLayout",
                "includemdlc": "true"
            }
        }]
      },
      "logconsole": {
        "type": "ColoredConsole"
      }
    },
  

Также создали это: https://github.com/microsoft/ApplicationInsights-dotnet/pull/2103

Комментарии:

1. Вау, это работает! Я очень благодарен за ваш ответ 🙂 но я не понимаю, как я мог бы решить эту проблему без вашего ведома, возможно, это просто опыт. Является ли ваш PR, чтобы сделать его готовым к использованию, как указано в документах? Итак, если PR одобрен, изменения конфигурации могут быть отменены, чтобы иметь ту же функциональность?

2. @321X Да, PR позволит захватывать контекст области видимости без помощи JsonLayout