在控制台应用程序中登录(带有依赖注入的.NET Core)

19

大家好。我正在尝试使用依赖注入(.NET Core 3.1)将日志记录添加到我的控制台应用程序中,似乎IoC容器对此很好地工作,将日志记录器依赖项注入到我的类中,但LogXXX方法没有将日志记录输出。可能的原因是什么?也许需要进行其他配置吗?

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace DependencyInjection
{
    class Program
    {
        static void Main(string[] args)
        {
            var services = new ServiceCollection();
            ConfigureServices(services);

            var serviceProvider = services.BuildServiceProvider();

            var logger = serviceProvider.GetService<ILogger<Program>>();
            logger.LogInformation("Hello world!");
        }

        static void ConfigureServices(ServiceCollection services)
        {
            services.AddLogging(loggerBuilder =>
            {
                loggerBuilder.ClearProviders();
                loggerBuilder.AddConsole();
            });
        }
    }
}

5
请访问以下链接:https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-3.1#add-providers 并阅读有关非托管控制台应用程序的部分。您需要自己创建工厂。 - Nkosi
2
实际上,我发现在 Main() 结束时处理 serviceProvider 可以解决这个问题。只需添加 serviceProvider.Dispose(); - Ivan Khorin
1个回答

39

文档中提供了Console App的当前示例。

class Program
{
    static void Main(string[] args)
    {
        using var loggerFactory = LoggerFactory.Create(builder =>
        {
            builder
                .AddFilter("Microsoft", LogLevel.Warning)
                .AddFilter("System", LogLevel.Warning)
                .AddFilter("LoggingConsoleApp.Program", LogLevel.Debug)
                .AddConsole();
        });
        ILogger logger = loggerFactory.CreateLogger<Program>();
        logger.LogInformation("Example log message");
    }
}

当然,您需要安装适当的Nuget包:

  • Microsoft.Extensions.Logging(日志记录库)
  • Microsoft.Extensions.Logging.Console(控制台输出提供程序)

10
如何从另一个类中访问记录器?是否有通过 DI 使其可用的方法? - Lamar
使用原始问题中的serviceProvider,使用以下代码: var logger = serviceProvider.GetRequiredService<ILogger<Program>>()) - balintn
我不确定为什么他们在新版本的文档中删除了这个!所有新的文档都展示了使用Web应用程序构建器。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接