执行迁移包时,日志不会发送到 Seq。正常执行应用程序时,所有内容都会整齐地发送到 Seq。
首先我认为这是因为
Log.CloseAndFlush()
没有被调用,因为我之前遇到了麻烦,这就是为什么我迁移到最小托管模型,现在我得到了最后一个日志 "Stopped web application"
但日志仍然没有发送到 seq 时运行迁移包。
程序.cs:
// truncated ...
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(directoryName)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: false);
if (!string.IsNullOrWhiteSpace(environment))
{
configurationBuilder.AddJsonFile($"appsettings.{environment}.json", optional: false, reloadOnChange: false);
}
configurationBuilder.AddEnvironmentVariables()
.AddEnvironmentVariables(EnvPrefix);
Log.Logger = new LoggerConfiguration().ReadFrom
.Configuration(configurationBuilder.Build())
.CreateLogger();
Console.WriteLine("Created bootstrapping logger");
try
{
Log.Information("Bootstrapping web application");
WebApplicationBuilder builder = WebApplication.CreateBuilder(args);
builder.Services.AddSerilog(logger => logger.ReadFrom.Configuration(builder.Configuration));
builder.Services.AddControllersWithViews();
builder.Services.AddDbContext<SomeDbContext>(
options => options.UseNpgsql(builder.Configuration.GetConnectionString("db")!,
options => options.MigrationsAssembly(typeof(SomeDbContext).GetTypeInfo().Assembly.GetName().Name))
);
// truncated ...
Log.Information("Building web application");
WebApplication app = builder.Build();
app.UseSerilogRequestLogging();
// truncated ...
Log.Information("Starting web application");
app.Run();
}
catch (Exception exception)
{
// https://github.com/dotnet/runtime/issues/60600
if (exception.GetType().Name.Equals("StopTheHostException", StringComparison.Ordinal))
{
throw;
}
Log.Fatal(exception, "Unhandled exception was caught: {Message}", exception.Message);
}
finally
{
Log.Information("Stopped web application");
Log.CloseAndFlush();
}
appsettings.json:
{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.Seq",
"Serilog.Enrichers.ClientInfo"
],
"MinimumLevel": {
"Default": "Information"
},
"Enrich": [
{"Name": "FromLogContext"},
{"Name": "WithCorrelationId", "Args": {"headerName": "x-correlation-id", "addValueIfHeaderAbsence": true}}
],
"Properties": {
"Application": "app-name"
},
"WriteTo": [
{"Name": "Console"},
{"Name": "Seq", "Args": {"serverUrl": "http://your-seq-url"}}
]
}
// truncated ...
}
此时我不知道为什么日志可能不会发送到 Seq,并且我正处于废弃迁移包的边缘。这只发生在使用 efc 迁移包时,正常运行时一切正常。
我找到了一个解决方法。 使用迁移包时,只需调整您的
appsettings*.json
以使用 AuditTo
而不是 WriteTo
,然后日志将被发送,而无需调用 Log.CloseAndFlush()
{
"Serilog": {
// truncated ...
"AuditTo": [
{"Name": "Console"},
{"Name": "Seq", "Args": {"serverUrl": "http://your-seq-url"}}
]
}
// truncated ...
}
注意:请记住,在正常应用程序运行期间使用它会出现性能问题。