У меня странная ситуация, когда я не могу получить никаких трассировок от 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()
.
В окне вывода, однако, принимаются все сообщения:
На всякий случай, я удалил файл appsettings.Development.json
и остался только appsettings.json
. Вот содержимое журнала:
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},