#c# #asp.net-core #asp.net-core-webapi #serilog
#c# #asp.net-core #asp.net-core-webapi #serilog
Вопрос:
PS: Моя проблема была во мне, а не в коде. Код в порядке. Мне нужно было изменить .WriteTo.Console()
на .WriteTo.Debug()
(и получить правильный пакет nuget).
Я пытаюсь вывести информацию из своих журналов, используя Serilog в веб-Api .NET Core. Однако никакая соответствующая информация (то есть информация, которую я хочу зарегистрировать) не выводится.
Я установил следующие пакеты Serilog nuget:
- Serilog
- Serilog.AspNetCore
- Serilog.Тонет.Консоль
- Serilog.Тонет.Файл
- Serilog.Тонет.RollingFile
Я рассматривал возможность установки параметров моей конфигурации в AppSettings.json, но предпочел бы сделать это таким образом, если это возможно.
Вот мой Program.cs
файл.
public class Program
{
public static void Main(string[] args)
{
// Create the logger
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
Log.Information("ah there you are");
Log.Debug("super");
Log.Error("super1");
Log.Warning("super2");
try
{
Log.Information("Starting web host");
// Program.Main logic
Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
Console.WriteLine(ex.Message);
}
finally
{
// Close and flush the log.
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog(); // set serilog as the loggin provider
}
У меня это настроено в моем Startup.cs
на случай, если это актуально.
public class Startup
{
private readonly ILogger _logger;
public Startup(IConfiguration configuration, ILogger<Startup> logger)
{
Configuration = configuration;
_logger = logger;
}
}
Ниже приведен вывод, который я получаю при запуске своего приложения. В этом нет ничего важного (и я просматривал его несколько раз, чтобы убедиться, что я ничего не упускаю. В основном, я прикрепляю эту фотографию, чтобы подтвердить, что я действительно ищу в правильной области).
Есть идеи?
Комментарии:
1. Изображение, которое вы показываете, предназначено для журналов отладки, а не для журналов консоли. Вам нужно проверить саму консоль cmd.
2. Здравствуйте @VidmantasBlazevicius, вы имеете в виду запуск dotnet для моего проекта? Вместо того, чтобы использовать кнопку воспроизведения отладки в VS? Если да, есть ли способ для меня просмотреть их с помощью кнопки воспроизведения?
Ответ №1:
Вам необходимо настроить свой регистратор в programs.cs
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseSerilog((context, configuration) => configuration
.Enrich.FromLogContext()
.MinimumLevel.Debug()
.WriteTo.Console(),
preserveStaticLogger:true);
}
Вы можете удалить все другие ссылки Serilog (в startup.cs) и инструкцию «Log.CloseAndFlush()» (она будет закрыта автоматически)
Затем вы можете внедрить ILogger<T>
интерфейс везде, где захотите.
Кстати: я не уверен, что «preserveStaticLogger» необходим.
Комментарии:
1. Добавление
preserveStaticLogger:true
исправило мои проблемы с использованием Serilog совместно с Oakton.