Serilog loggin ничего

#asp.net-core-webapi

#asp.net-core-webapi

Вопрос:

Привет всем, у меня есть проект Mcv Api, и я пытаюсь войти в систему с помощью Serilog, но когда я пытаюсь вызвать свой api и регистрирую некоторый текст в файле / консоли, он пуст, и я не могу понять, что не так

моя program.cs

         public static void Main(string[] args)
        {

            var seriliogConfiguration = new ConfigurationBuilder()
                .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "Configs"))
                .AddJsonFile("settings.json")
                .Build();
            var logger = new LoggerConfiguration()
                .ReadFrom.Configuration(seriliogConfiguration)
                .CreateLogger();
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .UseSerilog()
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
  

мои настройки json

 {
  "Serilog": {
    "Using": [],
    "MinimumLevel": {
      "Default": "Information",
      "Override": {
        "Microsoft": "Warning",
        "System": "Warning"
      }
    },
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId" ],
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "D:\Logs\logs.txt",
          "outputTemplate": "{Timestamp:G} {Message}{NewLine:1}{Exception:1}"
        }
      }
    ]
  }
}


  

и api, когда я пытаюсь выполнить вход в файл и консоль

         private readonly ILogger<WeatherForecastController> _logger;
        public WeatherForecastController(ILogger<WeatherForecastController> logger) =>  _logger = logger;
       
        public IEnumerable<WeatherForecast> Get() =>_logger.LogInformation("You requested Get()");
  

Ответ №1:

Потому Serilog что не вводится в Asp.net Core контейнер. Интерфейс, вызываемый в контроллере, не является Serilog методом. Таким образом, журнал не будет записан в файл. Вам нужно внести изменения Program.cs .

 public class Program
{
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
                var seriliogConfiguration = new ConfigurationBuilder()
                   .SetBasePath(Path.Combine(Directory.GetCurrentDirectory(), "Configs"))
                   .AddJsonFile("settings.json")
                   .Build();
                webBuilder.UseSerilog((hostingContext, loggerConfiguration) =>
                {
                    loggerConfiguration.ReadFrom.Configuration(seriliogConfiguration);

                });
            });
}
  

Я добавляю журнал в это действие.

     [HttpGet]
    public IActionResult Get()
    {
        _logger.LogInformation("This info is in index");

        return Ok();
    }
  

В консоли.

введите описание изображения здесь

В этом файле журнала.

введите описание изображения здесь