Работник .NET Core 3.0 - не может заставить регистрацию работать ни с Application Insights, ни с EventLog - PullRequest
1 голос
/ 10 ноября 2019

Мне нужна рабочая служба .NET 3.0 для входа в Azure Application Insights и EventLog. Ничего из этого не работает (почти)!

Вот мой CreateHostBuilder:

        public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .ConfigureServices((hostContext, services) =>
                {
                    IConfiguration configuration = hostContext.Configuration;

                    WatchdogOptions options = configuration.GetSection("WorkerOptions").Get<WatchdogOptions>();
                    if (options == null) throw new WatchdogException("WorkerOptions settings are not set");

                    services.AddSingleton(options);

                    services.AddHostedService<Worker>()
                    // .AddApplicationInsightsTelemetryWorkerService();
                    ;
                })
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    //logging.AddConsole();
                    logging.AddApplicationInsights("<instr-key>");
                    logging.AddEventLog(new EventLogSettings
                    {
                        SourceName = "PNWatchdog",
                        LogName = "Watchdog"
                    });
                });
        }

1) Что бы я ни делал EventLog не имеет записей от моего работника,И я установил уровень ведения журнала в настройках приложения:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "EventLog": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}

2) Application Insights получать записи только тогда, когда .AddApplicationInsightsTelemetryWorkerService() закомментирован и ключ инструментариязакодирован в logging.AddApplicationInsights("8d3bc77d-1cc3-4c4a-83e4-6d8aaa87f8f7"). Что нужно сделать, чтобы получить ключ из настроек приложения?

3) Почему это так громоздко?

ОБНОВЛЕНИЕ

Вот полный app.development.settings:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    }
  },
  "ApplicationInsights": {
    "InstrumentationKey": "8d3bc77d-1cc5-what-ever-0000000000"
  }
}

ОБНОВЛЕНИЕ 2

ApplicationInsights добавлено в Ведение журнала раздел:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    } 
  },
  "ApplicationInsights": {
    "InstrumentationKey": "8d3bc77d-1cc5-4c4a-83e4-6d8aaa87f8f7"
  }
}

ОБНОВЛЕНИЕ 3

Имя свойства изменено для Logging:ApplicationInsights:LogLevel:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    },
    "EventLog": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft.Hosting.Lifetime": "Information"
      }
    },
    "ApplicationInsights": {
      "LogLevel": {
        "PushNotificationsWatchdog.Worker": "Information"
      }
    }
  },
  "ApplicationInsights": {
    "InstrumentationKey": "8d3bc77d-1cc5-4c4a-83e4-6d8aaa87f8f7"
  }
}

То же самое - в App Insights нет записей. Ключ инструментария правильный.

РАЗРЕШЕНИЕ

Благодаря @ peter-bons!

Поэтому я изменил порядок ConfigureServices() и ConfigureLogging() и использовал appsettingsот ОБНОВЛЕНИЯ 2 и теперь это работает! Итак, поехали:

public static IHostBuilder CreateHostBuilder(string[] args)
        {
            return Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                    logging.AddEventLog(new EventLogSettings
                    {
                        SourceName = "PNWatchdog",
                        LogName = "Watchdog"
                    });
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>()
                        .AddApplicationInsightsTelemetryWorkerService();
                })
                .UseWindowsService(); // windows only feature
        }

Ответы [ 2 ]

2 голосов
/ 13 ноября 2019

TIL есть что-то вроде "Application Insights Telemetry WorkerService": -)

Я получил его с помощью AddApplicationInsightsTelemetryWorkerService. Но только если вы не звоните logging.ClearProviders(); или не звоните ConfigureLogging до ConfigureServices, в противном случае добавленный провайдер журналов очищается.

Это работает:

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                })
                .ConfigureServices((hostContext, services) =>
                {
                    services.AddHostedService<Worker>();
                    services.AddApplicationInsightsTelemetryWorkerService();
                });

с использованием этой конфигурации:

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  },
  "ApplicationInsights": {
      "InstrumentationKey": "xxx"
    }
  }

Как вы видите на выходе, AI ключ правильно подобран:

Application Insights Telemetry: {
    "name": "Microsoft.ApplicationInsights.Dev.3b40adb096064da0816e7b8579aa443c.Message",
    "time": "2019-11-13T07:52:11.0027057Z",
    "iKey": "xxx",
    "tags": {
        "ai.application.ver": "1.0.0.0",
        "ai.cloud.roleInstance": "xxx",
        "ai.internal.sdkVersion": "il:2.11.0-21511",
        "ai.internal.nodeName": "xxx"
    },
    "data": {
        "baseType": "MessageData",
        "baseData": {
            "ver": 2,
            "message": "Application started. Press Ctrl+C to shut down.",
            "severityLevel": "Information",
            "properties": {
                "{OriginalFormat}": "Application started. Press Ctrl+C to shut down.",
                "CategoryName": "Microsoft.Hosting.Lifetime",
                "DeveloperMode": "true"
            }
        }
    }
}
0 голосов
/ 11 ноября 2019

AddApplicationInsightsTelemetryWorkerService () - это рекомендуемый способ включить понимание приложения в WorkerService. Это может взять ikey из appsettings.json. Это внутренняя настройка провайдера журналирования (applicationinsightsloggingprovider).

Поставщик журналов ApplicationInsights по умолчанию регистрирует только журналы уровня «Предупреждение» или выше (https://docs.microsoft.com/en-us/azure/azure-monitor/app/worker-service#ilogger-logs).). Так что это мое первое подозрение. Можете ли вы записать что-то в «Предупреждение» или «Ошибка» и посмотреть, будет ли зафиксировано. Или изменитеуровень по умолчанию, фиксируемый информацией о приложении, для сбора информации или уровня трассировки. (https://docs.microsoft.com/en-us/azure/azure-monitor/app/ilogger#control-logging-level)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...