Как установить минимальный уровень входа в систему с помощью функции анализа приложений serilog

#azure-application-insights #serilog

Вопрос:

Я использую Serilog для входа в application insights, но я получаю только предупреждения, ошибки и критические уровни журнала для регистрации. В appsettings.json у меня установлен минимальный уровень журнала для подробного, и это регистрирует все с помощью приемников файлов и консоли.

По умолчанию application insights может регистрировать только предупреждения и выше. В коде (в разделе настройка ведения журнала) я могу добавить фильтр, чтобы переопределить это предупреждение по умолчанию и выше. Я предпочитаю делать это в настройках приложений с другой конфигурацией ведения журнала.

Как я могу использовать настройки приложений, чтобы разрешить Serilog регистрировать все уровни в Application Insights?

  • Я получаю некоторые журналы в application insights, поэтому подключение работает.
  • Я вижу все уровни входа в файл журнала и на консоли.

Где настраивается ведение журнала,если я добавлю файл уровня журнала (закомментирован) Я могу заставить это работать. Мне нужно работать с приложениями.

 host.ConfigureLogging(
                loggingBuilder =>
                {
                    var configuration = new ConfigurationBuilder()
                       .AddJsonFile("appsettings.json")
                       .Build();
                    var logger = new LoggerConfiguration()
                        .ReadFrom.Configuration(configuration)
                        .CreateLogger();
                    loggingBuilder.AddApplicationInsights();
                    loggingBuilder.AddSerilog(logger, dispose: true);
                    //loggingBuilder.AddFilter<ApplicationInsightsLoggerProvider>("", LogLevel.Trace);
            
                }
            );
 

Это мой код и результаты:
введите описание изображения здесь

Вот мои настройки приложений:

 "Serilog": {
    "AllowedHosts": "*",
    "Enrich": [ "WithMachineName" ],
    "MinimumLevel": {
      "Default": "Verbose",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "fileSizeLimitBytes": "1048576",
          "formatter": "Serilog.Formatting.Compact.CompactJsonFormatter, Serilog.Formatting.Compact , Version=1.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10",
          "path": "c:\LogFiles\Publisher\Test1\_log.txt",
          "retainedFileCountLimit": null,
          "rollingInterval": "Day",
          "rollOnFileSizeLimit": "true"
        }
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "restrictedToMinimumLevel": "Verbose",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ]
  },
 

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

1. Есть ли какой-нибудь прогресс, сэр? Если вы чувствуете, что мой пост ниже полезен для вас, не могли бы вы принять его в качестве ответа?

2. @TinyWang это то, что я сделал, но это не работает. Я вижу только предупреждения, ошибки и критические параметры приложений, вошедших в систему. Я могу заставить его работать, но добавлю это в код: loggingBuilder. addFilter<ApplicationInsightsLoggerProvider>(«», уровень журнала. Трассировка); Мне нужно, чтобы он работал из приложений. Похоже, у меня те же настройки приложений, что и у вас.

3. Я обновил вопрос примерами кода и конфигурации. Кроме того, я заметил, что вижу подробные сообщения уровня, которые регистрируют библиотеки Microsoft (в Microsoft. EntityFrameworkCore. Инфраструктура), только не тогда, когда я их регистрирую.

4. Я думаю, это потому, что ваш код охватывал настройку приложений. Я вспомнил, что конфигурация в коде более высокого уровня, чем в настройке приложений. Я увидел, что в вашем наборе приложений нет ключа инструмента, и не могли бы вы изменить свой файл program.cs на то, что я опубликовал ниже? В ходе моего тестирования я также нахожу много документов по серилогу конфигурации, но только то, что я опубликовал ниже, увенчалось успехом. Я также не могу понять причину, по которой может работать только эта конфигурация. Я думаю, что вы также можете создать пустое asp.net основной проект mvc и скопируйте мой код для тестирования(замените только ключ инструмента).

5. В разделе appinsights есть клавиша инструмента. Регистратор получает это, иначе ничего не было бы зарегистрировано (и я вижу это в отладчике).

Ответ №1:

Вот мой результат тестирования:

введите описание изображения здесь

Я создал свой asp.net основное приложение mvc, и вот мои настройки приложений.json:

 {
  "AllowedHosts": "*",
  "Serilog": {
    "Using": [],
    "MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "Console",
        "Args": {
          "restrictedToMinimumLevel": "Verbose",
          "outputTemplate": "{Timestamp:HH:mm:ss.fff zzz} [{Level}] {Message}  {NewLine}{Exception}"

        }
      },
      {
        "Name": "ApplicationInsights",
        "Args": {
          "instrumentationKey": "instrument_key_here",
          "restrictedToMinimumLevel": "Verbose",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
        }
      }
    ],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId"],
    "Properties": {
      "Application": "Sample"
    }
  }
}
 

Моя программа.cs, добавьте код конфигурации чтения и добавьте UseSerilog():

 using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Serilog;

namespace serilog_appsetting_file_appinsights
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var configuration = new ConfigurationBuilder()
                 .AddJsonFile("appsettings.json")
                 .Build();
            Log.Logger = new LoggerConfiguration()
                 .ReadFrom.Configuration(configuration)
                 .CreateLogger();

            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                }).UseSerilog();
    }
}
 

Мои посылки:

 <ItemGroup>
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.17.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="4.1.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="3.1.0" />
  </ItemGroup>
 

Мой файл контроллера:

 using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Serilog;
using serilog_appsetting_file_appinsights.Models;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;

namespace serilog_appsetting_file_appinsights.Controllers
{
    public class HomeController : Controller
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController(ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public IActionResult Index()
        {
            Log.Verbose("serilog_verbose_info");
            Log.Debug("serilog_debug_info");
            Log.Information("serilog_information_info");
            Log.Warning("serilog_warning_info");
            Log.Error("serilog_error_info");
            return View();
        }

        public IActionResult Privacy()
        {
            return View();
        }

        [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
        public IActionResult Error()
        {
            return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
        }
    }
}
 

При отладке в localhost мы можем видеть, как app insights записывает журналы, подобные этому, и просматривать журнал консоли

введите описание изображения здесь
введите описание изображения здесь