#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();
}
В консоли.
В этом файле журнала.