C# 在.NET Core MVC中使用Serilog记录Azure表存储

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

尽管花了几个小时在谷歌上,我还是没能做到。我们有一个核心的3.1 MVC Web应用程序项目,我被要求使用SeriLog将日志写入Azure表存储。就我的一生而言,我在网上找不到一个实用的例子或教程。以下是我迄今为止所做的工作:

1) 添加了以下NuGet:

  • 塞里洛格
  • 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上的页面帮助不大。我一直无法通过谷歌找到任何解释如何完成实施的信息

嗯,我没有被咬到。但在阅读了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
        }
    },