尽管在Google上花费了几个小时,但我仍未到达那里。我们有一个Core 3.1 MVC Web App项目,并且有人要求我使用SeriLog将日志写入Azure表存储。为了我的一生,我无法在线找到有效的示例或教程。这是我到目前为止所做的:
1)添加了以下NuGet的:
2)在AppSettings.json中,替换为:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Information",
"Microsoft.Hosting.Lifetime": "Warning"
}
使用此:
"Serilog": {
"WriteTo": [
{
"Name": "AzureTableStorage",
"Args": {
"storageTableName": "Logs",
"connectionString": "DefaultEndpointsProtocol=https;AccountName=***;AccountKey=***;EndpointSuffix=core.windows.net"
}
}
]
},
现在我被困住了。当前位于Program.cs
的CreateHostBuilder
中:
.ConfigureLogging(logging =>
{
logging.AddConsole();
})
我想我应该替换这个?但是,用什么呢?我不确定从这里要去哪里。 GutHub上的serilog-sinks-azuretablestorage页面没有太大帮助。而且我一直无法通过Google找到任何说明如何完成实施的内容。
嗯,我对此一无所获。但是在阅读了大约5篇不同的文章之后,我设法弄清楚了。在Program.cs中,默认情况下该位置:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging(logging =>
{
logging.AddConsole();
})
我用这个替换了它:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureLogging((hostingContext, logging) =>
{
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(hostingContext.Configuration)
.CreateLogger();
logging.AddSerilog(logger);
})
hostingContext
是HostBuilderContext
的一个实例,并且包含“ .Configuration”,它是IConfiguration
的一个实例。因此,hostingContext.Configuration
包含appsetting.json
中的所有设置。
除了我在OP中提到的NuGet软件包,我还必须添加此软件包:
Serilog.Settings.Configuration
(令人惊讶的是,有时有时要花7或8个小时才能编写4行代码。]
将Serilog.Settings.Configuration和Microsoft.Extensions.Logging nuget程序包添加到项目中,它有助于从appsettings.json中读取serilog配置设置,并确保Sartup.cs文件中的Serilog配置位于下方。
public Startup(IConfiguration configuration)
{
Configuration = configuration;
//logger config
var logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.CreateLogger();
logger.Information("Logging configured");
Log.Logger = logger;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddOptions();
services.AddLogging(loggingBuilder =>
{
loggingBuilder.AddConfiguration(Configuration.GetSection("Logging"));
loggingBuilder.AddConsole();
loggingBuilder.AddDebug();
//Add Serilog config to logbuilder
loggingBuilder.AddSerilog(Log.Logger);
});
}