Файловый приемник Serilog не регистрируется в файле

Я пытаюсь заставить приемник файлов Serilog работать в моем приложении ASP.Net core 2.2 на основе файла документация. Я не могу видеть журналы в своем приложении. Что мне не хватает?

Программа.cs:

using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Serilog;
using System;

namespace Scrubber
{
  public class Program
  {
    private static string _environmentName;

    public static void Main(string[] args)
    {
      try
      {
        var iWebHost = CreateWebHostBuilder(args).Build();
        var configuration = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
          .AddJsonFile($"appsettings.{_environmentName}.json", optional: true, reloadOnChange: true)
        .Build();

        var logger = new LoggerConfiguration()
          .ReadFrom.Configuration(configuration.GetSection("Serilog"))
          .CreateLogger();
        Log.Logger = logger;
        Log.Information("Application starting");
        iWebHost.Run();
      }
      catch(Exception exception)
      {
        Log.Error(exception.ToString());
      }
      finally
      {
        Log.CloseAndFlush();
      }
    }

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
          WebHost.CreateDefaultBuilder(args)
          .ConfigureLogging((hostingContext, config) =>
          {
            //config.ClearProviders();
            _environmentName = hostingContext.HostingEnvironment.EnvironmentName;
          })
          .UseStartup<Startup>();
    }
}

Appsettings.development.json:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    }
  },
  "Serilog": {
    "WriteTo": [
      {
        "Name": "File",
        "Args": {
          "path": "log.txt",
          "rollingInterval": "Day"
        }
      }
    ]
  } 
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
1 926
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможная причина в том, что приложение вообще не загрузило конфигурацию.

Обратите внимание, что вы настроили конфигурацию следующим образом:

   var configuration = new ConfigurationBuilder()
     .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
     .AddJsonFile($"appsettings.{_environmentName}.json", optional: true, reloadOnChange: true)
    .Build();
  1. Вы не указали базовый путь для ConfigurationBuilder
  2. Вы зарегистрировали файл optional json, установив optional: false

В результате, если файл json не находится в нужном месте, он автоматически завершается ошибкой.

Я предлагаю вам изменить свой код, как показано ниже:

// get the real path 
//     or by reflection 
//     or by injection, 
var path = Directory.GetCurrentDirectory();       // assume the current directory

var configuration = new ConfigurationBuilder()
    .SetBasePath(path)                                                       // set the right path
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)  //  make it required
    .AddJsonFile($"appsettings.{_environmentName}.json", optional: true, reloadOnChange: true)
    .Build();

Надеюсь, поможет.

Я как раз писал ответ и для этого тоже. SetBasePath, безусловно, проблема, но есть и вторая проблема: она должна быть просто ReadFrom.Configuration(configuration), потому что загрузчик конфигурации Serilog уже принимает раздел из "Serilog", что означает, что он не находит никаких значений.

Kirk Larkin 03.05.2019 09:11

Если вы хотите включить это в свой ответ, я удалю свой комментарий. :)

Kirk Larkin 03.05.2019 09:13

@KirkLarkin Большое спасибо. Но я думаю, что гораздо лучше оставить свой блестящий комментарий здесь, так как это указывает на то, что именно вы нам помогаете.

itminus 03.05.2019 09:18

Спасибо, Кирк Ларкин, @itminus. Предложенные вами изменения заставили ведение журнала приложения работать в Program.cs. Однако приложение не перенаправляло выходные данные Microsoft.Extensions.Logging.ILogger в Serilog.Log. Нужно ли мне регистрировать то же самое в ConfigureServices?

Ajit Goel 03.05.2019 15:44

Мне удалось заставить ведение журнала работать во всем приложении, добавив iLoggingBuilder.AddSerilog(); строка в публичном статическом IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) .ConfigureLogging((webHostBuilderContext, iLoggingBuilder) => { iLoggingBuilder.AddSerilog(); _environmentName = webHostBuilderContext.HostingEnvironment.EnvironmentName; }) .UseStartup< Запуск>();

Ajit Goel 04.05.2019 01:41

Другие вопросы по теме