簡體   English   中英

ASP.NET 核心 Web API - 如何將 .NET 核心 5 中的 SetupSerilog 轉換為 .NET 核心 6 Program.cs

[英]ASP.NET Core Web API - How to convert SetupSerilog in .NET Core 5 to .NET Core 6 Program.cs

我在 ASP.NET Core-5 Web API 中有一個代碼,我想將其轉換為 ASP.NET Core-6 Web API。

我有這個擴展。

日志設置擴展:

public static class LogSettingsExtension
{
    public static void SetupSerilog(IConfiguration config)
    {
        DocumentStore ravenStore = new()
        {
            Urls = new string[] { config["RavenDBConfigurations:ConnectionURL"] },
            Database = config["RavenDBConfigurations:DatabaseName"]
        };

        ravenStore.Certificate = new X509Certificate2(config["RavenDBConfigurations:CertificateFilePath"],
            config["RavenDBConfigurations:Password"], X509KeyStorageFlags.MachineKeySet);

        ravenStore.Initialize();

        Log.Logger = new LoggerConfiguration()
            .WriteTo.File(
                path: ".\\Logs\\log-.txt",
                outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
                rollingInterval: RollingInterval.Day,
                restrictedToMinimumLevel: LogEventLevel.Information
            )
            .WriteTo.RavenDB(ravenStore)
            .CreateLogger();
    }
}

在 .NET Core-5 中,我在 Program.cs 中將其用作:

public class Program
{
    public static void Main(string[] args)
    {
        var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
        var isDevelopment = env == Environments.Development;

        IConfiguration config = ConfigurationSetupExtension.GetConfig(isDevelopment);

        LogSettingsExtension.SetupSerilog(config);
        try
        {
            Log.Information("Application is starting...");
            CreateHostBuilder(args)
                .Build()
                .Run();
        }
        catch (Exception ex)
        {
            Log.Fatal(ex.StackTrace, "Application failed to start");
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

}

既然一切都變了,我該如何將其轉換為 .NET Core-6 中的 Program.cs?

謝謝

您可以如下所示設置您的 Program.cs。 最初設置了一個 BootstrapLogger,它僅在 Main 方法期間使用並且僅在控制台上記錄。 在 CreateHostBuilder 期間,Serilog 是根據您的配置設置的,以便在您的程序中使用。

public class Program
{
    public static int Main(string[] args)
    {
         Log.Logger = new LoggerConfiguration()
        .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
        .Enrich.FromLogContext()
        .WriteTo.Console()
        .CreateBootstrapLogger();

        try
        {
            CreateHostBuilder(args).Build().Run();
            return 0;
        }
        catch (Exception ex)
        {
            Log.Fatal(ex, "Host terminated unexpectedly");
            return 1;
        }
        finally
        {
            Log.CloseAndFlush();
        }
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
         .UseSerilog((context, services, configuration) =>
         {
             configuration
                 .ReadFrom.Configuration(context.Configuration);
         })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}

appsettings.json 中的示例配置將登錄控制台和文件。

"Serilog": {
"Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.File" ],
"MinimumLevel": {
  "Default": "Information",
  "Override": {
    "Microsoft": "Warning",
    "Microsoft.Hosting.Lifetime": "Information"
  }
},
"WriteTo": [
  { "Name": "Console" },
  {
    "Name": "File",
    "Args": { "path": "logs\\log-file-.txt" }
  }
],  
"Enrich": [ "FromLogContext" ]

}

一個問題是,這沒有提供直接登錄 Startup -> ConfigureServices() 的方法。 但是,有一些解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM