相关疑难解决方法(0)

无法从Microsoft.Extensions.Logging解析ILogger

我已经Main像这样配置了控制台应用程序

var services = new ServiceCollection()
                .AddLogging(logging => logging.AddConsole())
                .BuildServiceProvider();
Run Code Online (Sandbox Code Playgroud)

然后我尝试在另一个类中使用它

    private readonly ILogger _logger;

    public MyClass(ILogger logger)
    {
        _logger = logger;
    }

    public void MyFunc()
    {
        _logger.Log(LogLevel.Error, "My Message");
    }
Run Code Online (Sandbox Code Playgroud)

System.InvalidOperationException:'无法解析类型为'Microsoft.Extensions.Logging.ILogger的服务'

我在这里尝试了解决方案但对我而言不起作用。

根据以下Yaakov的评论和Github的评论进行编辑,我能够通过此操作正确解决它

    public MyClass(ILogger<MyClass> logger)
    {
        _logger = logger;
    }
Run Code Online (Sandbox Code Playgroud)

我本来希望在初始时使用它,BuildServiceProvider但看起来每次要使用记录器(或创建自己的ILogger)时都必须重复此操作。

.net c# dependency-injection .net-core ilogger

14
推荐指数
8
解决办法
9122
查看次数

如何使 .net core 3.1 控制台应用程序中的控制台记录器工作

我正在构建一个 .Net Core 3.1 控制台应用程序,我想在控制台日志记录中使用构建。关于 .net 日志记录的文章数不胜数,但我无法找到实际在控制台中写入的示例。

   namespace test
   {
      class Program
      {

        static void Main(string[] args)
        {
            var serviceProvider = new ServiceCollection()
                .AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
                .BuildServiceProvider();

            //configure console logging
            serviceProvider
                .GetService<ILoggerFactory>();


            var logger = serviceProvider.GetService<ILoggerFactory>()
                .CreateLogger<Program>();

            logger.LogDebug("All done!");

            Console.Write("Yup");
        }
    }
Run Code Online (Sandbox Code Playgroud)

它编译并运行,甚至向控制台写入“Yup”,但是“All done!” 未显示。控制台窗口中的输出:控制台输出

这是我的示例项目结构: 在此处输入图片说明

我错过了什么?

这是对服务的处理:感谢 Jeremy Lakeman 修复:

            static void Main(string[] args)
        {
            using (var serviceProvider = new ServiceCollection()
                .AddLogging(config => config.ClearProviders().AddConsole().SetMinimumLevel(LogLevel.Trace))
                .BuildServiceProvider())
            {
                //configure console logging
                serviceProvider
                    .GetService<ILoggerFactory>();


                var logger = serviceProvider.GetService<ILoggerFactory>()
                    .CreateLogger<Program>();

                // run app …
Run Code Online (Sandbox Code Playgroud)

c# console-application .net-core

7
推荐指数
2
解决办法
3098
查看次数

如何格式化控制台中日志的输出?(Microsoft.Extensions.Logging)

我使日志输出如下:

static void Main(string[] args)
    {
        ILoggerFactory loggerFactory = new LoggerFactory()
                                             .AddConsole();

        ILogger logger = loggerFactory.CreateLogger<Program>();

        logger.LogInformation(
          "This is a test of the emergency broadcast system.");

        Console.WriteLine("Press any key...");
        Console.Read();
    }
Run Code Online (Sandbox Code Playgroud)

我收到消息:

信息:ConsoleLogging.Program[0]

这是对紧急广播系统的一次测试。

但我想这样:

信息:这是对紧急广播系统的测试。

如何格式化控制台中日志的输出?我使用 Microsoft.Extensions.Logging、Microsoft.Extensions.Logging.Console 库。

c# console logging

5
推荐指数
1
解决办法
3234
查看次数