Ведение журнала с Serilog .NET Core не выводится - PullRequest
0 голосов
/ 29 марта 2019

PS: Моя проблема была со мной, а не с кодом.Код в порядке.Мне нужно было изменить .WriteTo.Console() на .WriteTo.Debug() (и получить правильный пакет nuget).

Я пытаюсь выводить информацию из моих журналов с помощью Serilog в .NET Core Web Api.Однако соответствующая информация (т.е. информация, которую я хочу зарегистрировать) не выводится.

Я установил следующие пакеты Nuil для Serilog:

  • Serilog
  • Serilog.AspNetCore
  • Serilog.Sinks.Console
  • Serilog.Sinks.File
  • Serilog.Sinks.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;
    }
}

Нижевывод я получаю при запуске приложения.В этом нет ничего важного (и я искал его несколько раз, чтобы подтвердить, что я ничего не пропустил. В основном, я прилагаю эту фотографию, чтобы подтвердить, что я действительно смотрю в правильной области).

enter image description here

Есть идеи?

1 Ответ

1 голос
/ 29 марта 2019

Вам необходимо настроить регистратор в программах .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.

...