在 .NET Core MVC 中使用 Serilog 记录 Azure Table 存储
Using Serilog for Logging with Azure Table Storage in .NET Core MVC
尽管在 google 上花费了数小时,但我没有到达那里。我们有一个 Core 3.1 MVC Web App 项目,我被要求使用 SeriLog 将日志写入 Azure Table 存储。对于我的生活,我无法在网上找到有效的示例或教程。这是我到目前为止所做的:
1) 添加了以下 NuGet:
- Serilog
- Serilog.Extensions.Logging
- Serilog.Sinks.AzureTaleStorage
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"
}
}
]
},
现在我卡住了。这目前在 CreateHostBuilder
中的 Program.cs
中:
.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
(写4行代码有时需要7、8个小时,真是太神奇了。)
将 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
}
},
尽管在 google 上花费了数小时,但我没有到达那里。我们有一个 Core 3.1 MVC Web App 项目,我被要求使用 SeriLog 将日志写入 Azure Table 存储。对于我的生活,我无法在网上找到有效的示例或教程。这是我到目前为止所做的:
1) 添加了以下 NuGet:
- Serilog
- Serilog.Extensions.Logging
- Serilog.Sinks.AzureTaleStorage
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"
}
}
]
},
现在我卡住了。这目前在 CreateHostBuilder
中的 Program.cs
中:
.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
(写4行代码有时需要7、8个小时,真是太神奇了。)
将 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
}
},