首页 > 解决方案 > .Net Core 控制台应用程序日志记录功能 - 为什么我的 Console.WriteLine 出现在开始和结束日志记录之外?

问题描述

在控制台应用程序中找到有关 .Net Core 日志记录的这篇文章。

它似乎有效,但我不知道为什么我的 Console.WriteLine("Doing stuff"); 出现在开始和结束日志消息之外。

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

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var services = new ServiceCollection();
            ConfigureServices(services);
            using (ServiceProvider serviceProvider = services.BuildServiceProvider())
            {
                MyApplication app = serviceProvider.GetService<MyApplication>();
                // Start up logic here
                app.Run();
            }
        }
        private static void ConfigureServices(ServiceCollection services)
        {
            services.AddLogging(configure => configure.AddConsole())
            .AddTransient<MyApplication>();
        }
    }

    public class MyApplication
    {
        private readonly ILogger _logger;
        public MyApplication(ILogger<MyApplication> logger)
        {
            _logger = logger;
        }
        internal void Run()
        {
            _logger.LogInformation("Application Started at {dateTime}", DateTime.UtcNow);

            //Business Logic START

            Console.WriteLine("Doing stuff");
            //Business logic END
            _logger.LogInformation("Application Ended at {dateTime}", DateTime.UtcNow);
        }
    }
}

在此处输入图像描述

标签: c#.net-core

解决方案


因为ConsoleLogger类在Microsoft.Extensions.Logging.Console排队消息。

它最终由内部记录器处理器在后台线程上处理并打印到控制台。

Console.WriteLine直接写入控制台。


推荐阅读