#c# #.net-core
#c# #.net-core
Вопрос:
Нашел эту статью о ведении журнала в .Net Core в консольном приложении.
Кажется, это работает, но я не знаю, почему моя консоль.Строка записи («Выполнение материала»); отображается вне сообщений о начале и завершении ведения журнала.
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);
}
}
}
Комментарии:
1. Что такое
ILogger
?Console.WriteLine
появляется первым, прежде чем ваш регистратор что-либо делает.
Ответ №1:
Потому что класс ConsoleLogger в Microsoft.Extensions.Logging.Console
ставит сообщение в очередь.
В конечном итоге он обрабатывается и распечатывается на консоль в фоновом потоке внутренним процессором регистратора.
Console.WriteLine
записывает непосредственно на консоль.