Почему я не могу заставить Serilog вести журнал на диск или в App Insights?
Я успешно использовал Serilog в течение последнего года или около того в нескольких проектах, все с относительно одинаковой настройкой, для входа в файлы на диске и для отправки в Azure Application Insights, но недавно я заметил, что не вижу журналов отображаются в указанной папке или вообще в моих ресурсах Application Insights. Я посмотрел, не изменилось ли что-то в настройке, но я не уверен, что изменилось бы.
Вот мой код: В Program.cs приложения Asp.Net Core Console:
Serilog.Debugging.SelfLog.Enable(msg => Debug.WriteLine(msg));
var logger = host.Services.GetRequiredService<ILogger<Program>>();
...
try
{
logger.LogInformation("Starting web host");
host.Run();
return 0;
}
catch (Exception e)
{
logger.LogCritical(e, "Web host terminated unexpectedly");
return 1;
}
finally
{
logger.LogInformation("Host was shut down");
}
...
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.UseSerilog((hostingContext, services, loggerConfig) =>
{
loggerConfig.SetLoggerConfiguration(hostingContext.Configuration, services);
});
...
using System;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
using Serilog.Events;
namespace Infrastructure.Helpers
{
public static class LoggerHelper
{
public static LoggerConfiguration SetLoggerConfiguration(this LoggerConfiguration
loggerConfiguration, IConfiguration configuration, IServiceProvider services)
{
return loggerConfiguration
.SetMinimumLevel()
.EnrichLogger()
.WriteToSinks(configuration, services);
}
}
public static class LoggerConfigurationExtensions
{
public static LoggerConfiguration SetMinimumLevel(this LoggerConfiguration loggerConfiguration)
{
return loggerConfiguration.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.MinimumLevel.Override("Microsoft.AspNetCore", LogEventLevel.Warning);
}
public static LoggerConfiguration EnrichLogger(this LoggerConfiguration loggerConfiguration)
{
return loggerConfiguration.Enrich.FromLogContext()
.Enrich.WithMachineName()
.Enrich.WithEnvironmentUserName()
.Enrich.WithProcessName()
.Enrich.WithProcessId();
}
public static LoggerConfiguration WriteToSinks(this LoggerConfiguration loggerConfiguration, IConfiguration configuration, IServiceProvider services)
{
loggerConfiguration.WriteTo.Console();
loggerConfiguration.WriteTo
.ApplicationInsights(services.GetRequiredService<TelemetryConfiguration>(),
TelemetryConverter.Traces);
loggerConfiguration.WriteToFile(configuration);
return loggerConfiguration;
}
public static LoggerConfiguration WriteToFile(this LoggerConfiguration loggerConfiguration, IConfiguration configuration)
{
var baseFileName = configuration["Logger:BaseFileName"];
loggerConfiguration.WriteTo.File($"log-files/{baseFileName}.log",
outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {Properties:j}{NewLine}{Exception}",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true,
retainedFileCountLimit: null,
shared: true);
return loggerConfiguration;
}
}
}
Я проверил, что используемые ключи ApplicationInsights были правильными для указанных ресурсов.