Как я могу передать все сообщения из System.Diagnostics.Trace в ILogger? - PullRequest
0 голосов
/ 05 февраля 2019

У меня много кода, где я использую System.Diagnostics.Trace.Я хочу сохранить все сообщения в файл, используя ILogger, nlog.Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вы можете реализовать свой собственный TraceListener, который будет выглядеть примерно так:

   // https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.tracelistener?view=netframework-4.7.2
   public class LoggerTraceListener : TraceListener
  {
    private readonly ILogger _logger;

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

    public override void Write(string message)
    {
      _logger.LogInformation(message);
    }

    public override void WriteLine(string message)
    {
      _logger.LogInformation(message);
    }
  }

А затем, при запуске, вы можете зарегистрировать этот слушатель

public class Startup
{
    // Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        var logger = app.ApplicationServices.GetService<ILogger<Startup>>();

        //https://docs.microsoft.com/en-us/dotnet/framework/debug-trace-profile/how-to-create-and-initialize-trace-listeners#to-create-and-use-a-trace-listener-in-code
        Trace.Listeners.Add(new LoggerTraceListener(logger));  
    }
}

.для ILogger вы можете настроить свою фабрику логгера на вывод в файл.

0 голосов
/ 05 февраля 2019

Вы не можете.Однако, если вы работаете наоборот, то есть добавляете поставщика трассировки в Microsoft.Extensions.Logging, а затем регистрируетесь с ILogger.сообщения будут отправляться в Trace, и любые другие настройки журналирования, которые вы настроите.

Если вы пытаетесь захватить журналирование, выполненное платформой, .NET Core уже использует Microsoft.Extensions.Logging.Вам просто нужно соответствующим образом изменить уровень журнала, чтобы он записывал уровни Debug и Trace, в дополнение к стандартному значению Info или выше.Кроме того, если вы заинтересованы в ведении журналов только для определенных компонентов, вы можете указать уровни журналов и поставщиков по пространству имен. документы содержат всю необходимую информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...