我在ASP.NET Core-5WebAPI中有一个代码,我想将它转换为ASP.NET Core-6WebAPI。
我有这个分机。
LogSettingsExtension:
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>();
});
}既然一切都变了,我如何在Program.cs核心-6中将其转换为.NET?
谢谢
发布于 2022-05-10 07:28:43
您可以设置您的Program.cs,如下所示。最初,只在主方法期间使用并仅在控制台上登录的BootstrapLogger设置。在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()。不过,也有一些解决办法。
https://stackoverflow.com/questions/72182061
复制相似问题