尽管在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找到任何说明如何完成实施的内容。
答案 0 :(得分:1)
好吧,我对此一无所获。但是在阅读了大约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行代码。)
答案 1 :(得分:0)
将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);
});
}
//Add this config in appsettings.json
"Serilog": {
"Using": [ "Serilog.Sinks.AzureTableStorage" ],
"WriteTo": [
{
"Name": "AzureTableStorage",
"Args": {
"storageTableName": "MyAppLogs
"connectionString": ""
}
}
],
"Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],
"Properties": {
"Application": MyApp
}
},