Использование Serilog для Application Insights — регистрация запросов, но не трассировка

ОБНОВЛЯТЬ

При закрытии приложения с помощью ctrl+c в консоли выполняется блок «finally» программы.cs, журналы сбрасываются и сохраняются в Application Insights. Однако, если приложение внезапно останавливается (например, окно браузера закрывается), журналы не отправляются в Application Insights, и информация теряется, что не идеально. Есть ли у кого-нибудь метод или предложение, чтобы журналы очищались чаще или как защититься в случае неожиданного завершения работы приложения?

ОРИГИНАЛ

Я пытаюсь настроить проект веб-приложения С# для регистрации файлов в Application Insights с помощью Serilog. Я следил за документацией, чтобы настроить регистратор для чтения файла appsetting.json и смог реализовать другие приемники для записи журналов в консоль, файл SEQ и т. д., но Application Insights не будет работать. Данные запроса доступны в статистике приложений с использованием приведенной ниже конфигурации.

Программа.cs

      var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .Build();

Log.Logger = new LoggerConfiguration()
    .ReadFrom.Configuration(configuration)
        .CreateBootstrapLogger();

Log.Information("Application Starting up");


try
{
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddApplicationInsightsTelemetry();

   builder.Host.UseSerilog();

    // Add services to the container.
    builder.Services.AddRazorPages();

    var app = builder.Build();

    // Configure the HTTP request pipeline.
    if (!app.Environment.IsDevelopment())
    {
        app.UseExceptionHandler("/Error");
        // The default HSTS value is 30 days. You may want to change this for production scenarios,   see https://aka.ms/aspnetcore-hsts.
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSerilogRequestLogging();

    app.UseRouting();

    app.UseAuthorization();

    app.MapRazorPages();

    app.Run();
}
catch (Exception ex)
{
    Log.Fatal(ex, "the application failed to start correctly");
}
finally
{
    Log.CloseAndFlush();
}

appsettings.json

      {
  "ApplicationInsights": {
    "connectionString": "MyConnectionString"
    
  },

  "Serilog": {
    "Using": [
      "Serilog.Sinks.ApplicationInsights"
    ],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Information",
        "System": "Information"
      }
    },
    "WriteTo": [
      {
        "Name": "ApplicationInsights",
        "Args": {
          "connectionString": "*MyConnectionString",
          "telemetryConverter": "Serilog.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights",
        }
      }
      , 
      {
        "Name": "Console"
      }
    ],
    "Enrich": [ "FromLogcontext", "WithMachineName", "WithProcessId", "WithThreadId" ]

  }
}

Запросы сохраняются в сведениях о приложении, но я не могу сохранить журналы (трассировки) или исключения. Я что-то пропустил??

Изменить. У меня есть события журнала, записанные в индексе так

       public class IndexModel : PageModel
{
    private readonly ILogger<IndexModel> _logger;

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

    public void OnGet()
    {
        try
        {
            for (int i = 0; i < 10; i++)
            {
                if (i == 5)
                {
                    _logger.LogCritical("Serilog: Testing log critical");  
                    throw new Exception("Serilog iLogger Exception");
                }
                else
                {
                    _logger.LogWarning("Serilog: The value of i is {LoopCountValue}", i);
                    _logger.LogWarning("Serilog: Testing log warning");
                    
                }
            }
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "exception in the index Get call");
        }
    }
}

Добавление файла .csproj

      <Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
    <PackageReference Include="Serilog" Version="2.12.0" />
    <PackageReference Include="Serilog.AspNetCore" Version="6.1.0"/>
    <PackageReference Include="Serilog.Enrichers.Environment" Version="2.2.0" />
    <PackageReference Include="Serilog.Settings.Configuration" Version="3.4.0" />
    <PackageReference Include="Serilog.Sinks.ApplicationInsights" Version="4.0.0" />
    <PackageReference Include="Serilog.Sinks.Console" Version="4.1.0" />
    <PackageReference Include="Serilog.Settings.AppSettings" Version="2.2.2" />
    <PackageReference Include="Microsoft.ApplicationInsights" Version="2.21.0" />
    <PackageReference Include="Microsoft.ApplicationInsights.AspNetCore" Version="2.21.0" />
    <PackageReference Include="Serilog.Enrichers.AspNetCore" Version="1.0.0" />
    <PackageReference Include="Serilog.Sinks.Debug" Version="2.0.0" />
    <PackageReference Include="Serilog.Sinks.Seq" Version="5.2.2" />
</ItemGroup>
</Project>

0 ответов

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