首页 > 解决方案 > 在 .NET Core MVC 中使用 Serilog 和 Azure 表存储进行日志记录

问题描述

尽管在谷歌上花了几个小时,我还是没有到达那里。我们有一个 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.csCreateHostBuilder

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

我想我应该更换这个?但是,用什么?我不知道从这里去哪里。GutHub 上的serilog-sinks-azuretablestorage页面没有多大帮助。而且我无法通过谷歌找到任何解释如何完成实施的东西。

标签: c#.net-coreserilog

解决方案


好吧,我对此没有任何意见。但是在阅读了大约 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.设置.配置

(令人惊讶的是,有时编写 4 行代码可能需要 7 或 8 个小时。)


推荐阅读