Warm tip: 本文翻译自 stackoverflow.com,查看原文请点击:, please click

c#-如何使.net Core 3.1控制台应用程序中的控制台记录器正常工作

(c# - How to make console logger in .net core 3.1 console app work)

发布于 2020-06-18 16:02:24

我正在构建.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");
        }
    }

它编译并运行,甚至将“ Yup”写入控制台,但“一切完成!” 没有显示。在控制台窗口中输出:控制台输出

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

我想念什么?

这是服务的一种处理方式:杰里米·莱克曼(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 logic

                logger.LogDebug("All done!");
            }

            Console.Write("Yup");
        }
Questioner
k.c.
Viewed
0
Jeremy Lakeman 2020-06-20 18:04:03

为了使日志记录不会对程序的性能产生不利影响,它可以异步编写。

处置日志提供程序和其他日志记录类应导致刷新日志。

服务提供者在处置服务时也应处置所有服务。