如何将所有消息从System.Diagnostics.Trace传输到ILogger?

时间:2019-02-05 15:22:39

标签: asp.net-core

在使用System.Diagnostics.Trace的地方有很多代码。我想使用ILogger,nlog将所有消息保存到文件中。我该怎么办?

2 个答案:

答案 0 :(得分:1)

不能。但是,如果您采用其他方法,即将Trace提供程序添加到Microsoft.Extensions.Logging,然后使用ILogger进行记录。邮件将发送到跟踪,以及您已设置的任何其他日志记录。

如果您试图捕获由框架完成的日志记录,则.NET Core已使用Microsoft.Extensions.Logging。您只需要适当地更改日志级别即可,除了默认的Info或更高级别之外,它还可以捕获Debug和Trace级别。另外,如果您仅对从某些组件进行日志记录感兴趣,则可以按名称空间指定日志级别和提供程序。 docs在那里具有您需要的所有信息。

答案 1 :(得分:1)

您可以实现自己的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,您可以将记录器工厂配置为输出到文件。