C# 在.NET Core MVC中使用Serilog记录Azure表存储
尽管花了几个小时在谷歌上,我还是没能做到。我们有一个核心的3.1 MVC Web应用程序项目,我被要求使用SeriLog将日志写入Azure表存储。就我的一生而言,我在网上找不到一个实用的例子或教程。以下是我迄今为止所做的工作: 1) 添加了以下NuGet:C# 在.NET Core MVC中使用Serilog记录Azure表存储,c#,.net-core,serilog,C#,.net Core,Serilog,尽管花了几个小时在谷歌上,我还是没能做到。我们有一个核心的3.1 MVC Web应用程序项目,我被要求使用SeriLog将日志写入Azure表存储。就我的一生而言,我在网上找不到一个实用的例子或教程。以下是我迄今为止所做的工作: 1) 添加了以下NuGet: 塞里洛格 Serilog.Extensions.Logging Serilog.Sinks.AzureTaleStorage 2) 在AppSettings.json中,替换了以下内容: "Logging": { "LogL
- 塞里洛格
- Serilog.Extensions.Logging
- Serilog.Sinks.AzureTaleStorage
"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上的页面帮助不大。我一直无法通过谷歌找到任何解释如何完成实施的信息 嗯,我没有被咬到。但在阅读了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个小时,这真是太神奇了。)好吧,我没有得到任何关于这方面的信息。但在阅读了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
}
},
将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
}
},