首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在.net core 3.1控制台应用程序中使用控制台记录器

如何在.net core 3.1控制台应用程序中使用控制台记录器
EN

Stack Overflow用户
提问于 2020-06-19 00:02:25
回答 2查看 3.9K关注 0票数 8

我正在构建一个.Net Core3.1控制台应用程序,并且我想使用控制台日志记录功能。关于.net日志记录的文章数不胜数,但我还没有找到一个可以在控制台中实际编写的示例。

代码语言:javascript
运行
复制
   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“,但"All done!”未显示。控制台窗口中的输出:

这是我的示例项目结构:

我遗漏了什么?

这是一个服务的处置:修复感谢Jeremy Lakeman:

代码语言:javascript
运行
复制
            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");
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-06-20 18:04:04

因此,日志记录不会对程序的性能产生负面影响,它可以异步编写。

释放日志提供程序和其他日志记录类应该会导致日志刷新。

服务提供商还应在处置时处置所有服务。

票数 2
EN

Stack Overflow用户

发布于 2020-11-28 13:25:10

我可能会迟到,但值得添加一些输入,以防万一。我也在努力解决.net内核中的日志记录问题,并且在最新版本中不断有一些破坏性的变化。然而,不能抱怨,因为它变得越来越好。以下是我对发布的.net核心5所做的工作。

代码语言:javascript
运行
复制
public static class ApplicationLogging
{
    public static ILoggerFactory LogFactory { get; } = LoggerFactory.Create(builder =>
    {
        builder.ClearProviders();
        // Clear Microsoft's default providers (like eventlogs and others)
        builder.AddSimpleConsole(options =>
            {
                options.IncludeScopes = true;
                options.SingleLine = true;
                options.TimestampFormat = "hh:mm:ss ";
            }).SetMinimumLevel(LogLevel.Warning);
    });

    public static ILogger<T> CreateLogger<T>() => LogFactory.CreateLogger<T>();
}

static void Main(string[] args)
{
    var logger = ApplicationLogging.CreateLogger<Program>();
    logger.LogInformation("Let's do some work");
    logger.LogWarning("I am going Crazy now!!!");
    logger.LogInformation("Seems like we are finished our work!");
    Console.ReadLine();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62454301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档