Использование Serilog для ведения журнала с Azure Table Storage in. NET Core MVC - PullRequest
0 голосов
/ 01 апреля 2020

Несмотря на часы, проведенные на Google, я не добираюсь туда. У нас есть проект веб-приложения Core 3.1 MVC, и меня попросили использовать SeriLog для записи журналов в Azure Table Storage. Для жизни я не могу найти рабочий пример или учебник в Интернете. Вот что я сделал до сих пор:

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();
})

Я полагаю, я должен заменить это? Но с чем? Я не уверен, где go отсюда. Страница serilog-sinks-azuretablestorage на GutHub не сильно поможет. И я не смог найти в Google ничего, что объясняет, как завершить sh реализацию.

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Добавьте Serilog.Settings.Configuration и Microsoft.Extensions.Logging пакет nuget к вашему проекту, это поможет прочитать параметры конфигурации serilog из appsettings. json и убедитесь, что в вашем файле 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
        }
    },
0 голосов
/ 02 апреля 2020

Ну, я не получил никаких укусов по этому поводу. Но прочитав около 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.

В дополнение к пакетам NuGet, о которых я упоминал в OP, мне также пришлось добавить один:

Serilog. Settings.Configuration

(Удивительно, как иногда может потребоваться 7 или 8 часов, чтобы написать 4 строки кода.)

...