迁移捆绑日志未发送到 Seq

问题描述 投票:0回答:1

执行迁移包时,日志不会发送到 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 迁移包时,正常运行时一切正常。

asp.net-core entity-framework-core entity-framework-migrations serilog
1个回答
0
投票

我找到了一个解决方法。 使用迁移包时,只需调整您的

appsettings*.json
以使用
AuditTo
而不是
WriteTo
,然后日志将被发送,而无需调用
Log.CloseAndFlush()

{
    "Serilog": {
    // truncated ...
        "AuditTo": [
            {"Name": "Console"},
            {"Name": "Seq", "Args": {"serverUrl": "http://your-seq-url"}}
        ]
    }
    // truncated ...
}

注意:请记住,在正常应用程序运行期间使用它会出现性能问题。

© www.soinside.com 2019 - 2024. All rights reserved.