繁体   English   中英

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

[英]Using Serilog for Logging with Azure Table Storage in .NET Core MVC

尽管在谷歌上花费了数小时,但我没有到达那里。 我们有一个 Core 3.1 MVC Web App 项目,我被要求使用 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 上的 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);
        })

hostingContexthostingContext的一个实例,它包含 ' HostBuilderContext ' ,它是IConfiguration一个实例。 所以hostingContext.Configuration包含所有设置appsetting.json

除了我在 OP 中提到的 NuGet 包之外,我还必须添加这个:

串行日志.设置.配置

(令人惊讶的是,有时编写 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
        }
    },

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM