[英]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.