Netcore не входит в консоль
У меня есть простой тестовый проект, чтобы поэкспериментировать с регистрацией в NetCore 2.0 с помощью пакета Microsoft Logging Extensions.
Проблема в том, что когда я запускаю свое приложение в первый раз, оно записывает информационные сообщения, как и ожидалось. Странное поведение, которое я испытываю, заключается в том, что при последующих запусках сообщения вообще не выдаются.
Мой проект нацелен на инфраструктуру Net Core 2.0, и на нем установлены следующие пакеты NuGet:
- Microsoft.Extensions.Logging
- Microsoft.Extensions.Logging.Abstractions
- Microsoft.Extensions.Logging.Console
- Microsoft.Extensions.Logging.Debug
Ниже приведен мой пример кода, с которым я пытаюсь настроить ведение журнала:
using System;
namespace LoggingNetCore2
{
using Microsoft.Extensions.Logging;
class Program
{
static void Main(string[] args)
{
var loggerFactory = new LoggerFactory();
loggerFactory.AddConsole();
loggerFactory.AddDebug(); // <-- why is this needed for console logging?
var logger = loggerFactory.CreateLogger(typeof(Program));
logger.LogInformation("Hello, World!");
logger.LogTrace("trace");
logger.LogDebug("debug");
logger.LogWarning("warning");
logger.LogCritical("critical");
logger.LogError("errrrr");
//using (logger.BeginScope("MyMessages"))
//{
// logger.LogInformation("Beginning Operation...");
// logger.LogInformation("Doing something cool... please wait.");
// logger.LogInformation("Completed successfully.");
//}
}
}
}
Я не получаю вывод в окне консоли, когда я запускаю выше. Есть идеи, которые приходят на ум, о том, что может происходить?
Вещи, которые я пробовал:
- Добавлен пакет Microsoft.Extensions.Logging.Abstractions, поскольку я смутно помню, что в прошлом это нужно было делать в приложениях NetCore 1.0.
- Деинсталлировал / переустановил вышеуказанные пакеты.
- Я даже пытался запустить приложение из командной строки с помощью команды dotnet.exe, но безрезультатно.
- Если я вернусь к платформе NetCore 1.1 (и к пакетам NuGet до версии 1.1), все будет работать как положено.
Редактировать: я получил журналы, показывающие теперь в окне консоли, если я добавляю поставщика журнала отладки в смесь.
В приложении NetCore 1.x достаточно было просто добавить поставщика консоли.
Редактирование #2: Оказывается, поставщик журналирования консоли не сразу сбрасывает сообщения в консоль, как это было в версиях net-core-1.x. Кажется, он работает в другом потоке. См. Эту веб-страницу для информации: https://github.com/aspnet/Logging/issues/631
1 ответ
@ajawad987, ты прав. Dispose()
работает.
public class Program
{
public static void Main(string[] args)
{
var services = new ServiceCollection()
.AddLogging(config => config.AddConsole())
.BuildServiceProvider();
services.GetRequiredService<ILogger<Program>>()
.LogCritical("Hello");
((IDisposable) services)?.Dispose();
}
}