Получите экземпляр ILogger для App Insights из ServiceCollection в приложении WebForms .NET Framework

Мы хотим получить экземпляр ILogger, чтобы его можно было передать в другую библиотеку. Ниже мы попытались, но экземпляр ILogger не входит в Application Insights. Он успешно входит в средство просмотра событий.

        var serviceCollection = new ServiceCollection();
        serviceCollection.AddLogging(builder => builder
        .AddFilter("Default", LogLevel.Information)
        .AddFilter("Microsoft", LogLevel.Warning)
        .AddFilter("System", LogLevel.Warning)
        .AddEventLog(config => { config.LogName = "Pages"; config.SourceName = "Pages"; })
        .AddApplicationInsights(telemetry =>
        telemetry.ConnectionString = "my-key",
        options => options = new ApplicationInsightsLoggerOptions()));


        var serviceProvider = serviceCollection.BuildServiceProvider();
        var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
        var logger = loggerFactory.CreateLogger("my-logger");
        logger.LogInformation("Hi");

Мы добавили необходимые пакеты, например Microsoft.Extensions.Logging и Microsoft.Extensions.Logging.ApplicationInsights.

Неужели нельзя получить экземпляр ILogger из ServiceCollection для AppInsights?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
91
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

  • Если вы используете Visual Studio, вы можете настроить Insights приложения напрямую с помощью параметра connection service.

  • Просто нажмите на файл conneted service в обозревателе решений.

  • После этого нажмите Add a service dependency, чтобы настроить аналитику приложения.

  • Теперь появится всплывающее окно, в котором выберите Azure Application Insights, затем нажмите «Далее».

  • Теперь выберите приложение Insghts из списка или создайте новое.

  • Теперь просто продолжайте нажимать «Далее/Готово», пока процесс не завершится. Таким образом, теперь вы настроили аналитику приложения в своей веб-форме, и в аналитике приложения начнут появляться трассировки.

Выходные данные портала Azure: —

Как в этом случае настроить пользовательские журналы? Поскольку я хочу регистрировать пользовательские сообщения в средстве просмотра событий и в Application Insights, я использую ILogger.

Jatin 16.01.2023 15:33
Ответ принят как подходящий

Я выяснил, что он не ведет журнал в AppInsights, потому что не было должным образом настроенных TelemetryChannel или TelemetryClient.

Подход 1 — использование канала телеметрии

using (var channel = new InMemoryChannel()) {
                var serviceCollection = new ServiceCollection();
                serviceCollection.Configure<TelemetryConfiguration>(config => config.TelemetryChannel = channel);
                serviceCollection.AddLogging(builder => builder
                .AddFilter("Default", LogLevel.Information)
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddEventLog(config => { config.LogName = "Pages"; config.SourceName = "Pages"; })
                .AddApplicationInsights(config => config.ConnectionString = "my-key",
                options => { }));
                var serviceProvider = serviceCollection.BuildServiceProvider();
                var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
                var logger = loggerFactory.CreateLogger("my-logger");
                logger.LogInformation("my new try");                 channel.Flush();
                System.Threading.Thread.Sleep(1000);
            }

Подход 2 — внедрение клиента телеметрии с помощью пакета Microsoft.ApplicationInsights.WorkerService

var serviceCollection = new ServiceCollection();

            serviceCollection.AddApplicationInsightsTelemetryWorkerService(options => options.ConnectionString = "my-key");
            serviceCollection.AddLogging(builder => builder
            .AddFilter<Microsoft.Extensions.Logging.ApplicationInsights.ApplicationInsightsLoggerProvider>("", LogLevel.Information)
            .AddFilter("Default", LogLevel.Information)
            .AddFilter("Microsoft", LogLevel.Warning)
            .AddFilter("System", LogLevel.Warning)
            .AddEventLog(config => { config.LogName = "Pages"; config.SourceName = "Pages"; }));

            var serviceProvider = serviceCollection.BuildServiceProvider();
            var loggerFactory = serviceProvider.GetService<ILoggerFactory>();
            var telemetryClient = serviceProvider.GetService<TelemetryClient>();
            var logger = loggerFactory.CreateLogger("my-logger");
            logger.LogInformation("my new try");                 
            telemetryClient.Flush();
            System.Threading.Thread.Sleep(1000);

Оба подхода будут работать нормально; мы использовали подход 2.

Другие вопросы по теме