使用Serilog在.NET Core MVC中使用Azure表存储进行日志记录

时间:2020-04-01 14:08:39

标签: c# .net-core serilog

尽管在Google上花费了几个小时,但我没有到达那里。我们有一个Core 3.1 MVC Web App项目,并且有人要求我使用SeriLog将日志写入Azure表存储。为了我的一生,我在网上找不到有效的示例或教程。到目前为止,这是我所做的:

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"
        }
      }
    ]
  },

现在我被困住了。当前位于Program.cs中的CreateHostBuilder中:

.ConfigureLogging(logging =>
{
    logging.AddConsole();
})

我认为我应该替换掉它?但是,用什么呢?我不确定从这里要去哪里。 GutHub上的serilog-sinks-azuretablestorage页没有太大帮助。而且我一直无法通过Google找到任何说明如何完成实施的内容。

2 个答案:

答案 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);
        })

hostingContextHostBuilderContext的实例,它包含'.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
        }
    },