Как войти в консоль в c# - PullRequest
       68

Как войти в консоль в c#

0 голосов
/ 27 марта 2020

Я хочу использовать Microsoft.Extensions.Logging, чтобы записывать данные на консоль. Я настроил это так:

static void Main()
{
    ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    ILogger logger = loggerFactory.CreateLogger<Program>();
    logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}

Однако на консоль ничего не записано.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Я думаю, что самый простой способ выполнить sh это (без использования GenericHost) - использовать ServiceCollection.

public static void Main()
{
    var collection = new ServiceCollection();
    collection.AddLogging(b => {
        b.AddConsole();
        b.SetMinimumLevel(LogLevel.Information);
    });
    var sp = collection.BuildServiceProvider();

    using(var scope = sp.CreateScope())
    {
        var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>();
        logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
    }
}

.netfiddle пример

0 голосов
/ 27 марта 2020

Проблема в том, что ConsoleLoggerProvider, который добавляется к loggerFactory с помощью AddConsole, равен IDisposable и должен быть утилизирован, чтобы грипп sh вывел. Уничтожение loggerFactory приведет к sh этому. Так что либо вызовите loggerFactory.Dispose() в конце программы, либо добавьте using при создании loggerFactory следующим образом:

static void Main()
{
    using ILoggerFactory loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    ILogger logger = loggerFactory.CreateLogger<Program>();
    logger.LogInformation("Current directory {0}", Directory.GetCurrentDirectory());
}
...