ASP.NET Core ILogger не регистрируется в Trace, если не подключен отладчик - PullRequest
0 голосов
/ 03 октября 2019

У меня странная ситуация, когда я не могу получить никаких трассировок от ASP.NET Core ILogger<T>, если не подключен отладчик (даже если я работаю в конфигурации отладки). Сначала позвольте мне объяснить:

Мне нужно записывать журналы в файлы по дате, и я ранее написал для этого простой пользовательский TraceListener, поэтому я думаю, что могу использовать его снова, не написав новый поставщик журналов:

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureLogging(logging =>
            {
                logging.AddTraceSource("IISLogCleaner");
                // I added below line to make sure I am not missing anything
                logging.SetMinimumLevel(LogLevel.Trace);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });

В Startup.ConfigureServices() я добавляю прослушиватель:

            var listener = new DailyTraceListener(folder);
            Trace.Listeners.Add(listener);

Теперь для фоновой задачи ведения журнала:

    ILogger<CleanupTask> logger;

    public CleanupTask(ILogger<CleanupTask> logger)
    {
        this.logger = logger;
    }

    // ...

    async Task<int> WorkAsync(CancellationToken token)
    {
        System.Diagnostics.Debug.WriteLine("Start Working");
        this.logger.LogInformation("Start working");

        await Task.Delay(1000);

        this.logger.LogInformation("Work finished");
        return await Task.FromResult(10000);
    }

Вот проблема: с подключенным отладчиком все журналызаписываются в файл журнала. Однако, когда я выбираю Запуск без отладки, даже в конфигурации отладки, файл не создается, контент не записывается, пока я не добавил вызовы Debug.WriteLine, теперь регистрируются только эти строки, но не записываются все logger.LogInformation().

enter image description here

В окне вывода, однако, принимаются все сообщения:

enter image description here

На всякий случай, я удалил файл appsettings.Development.json и остался только appsettings.json. Вот содержимое журнала:

"Logging": {
    "LogLevel": {
        "Default": "Information",
        "Microsoft": "Warning",
        "Microsoft.Hosting.Lifetime": "Information"
    }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...