Использование 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>