Ведение журнала с помощью Serilog .СЕТЕВОЕ ядро не выводится

#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.