Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How I can transfer all messages from System.Diagnostics.Trace to ILogger?

Tags:

asp.net-core

I have a lot of code where I use System.Diagnostics.Trace. I want to save all messages to file using ILogger, nlog. How I can do it?

like image 699
heoLixfy Avatar asked Sep 02 '25 11:09

heoLixfy


1 Answers

You could implement your own TraceListener, which would look something similar to this

   // https://learn.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);
    }
  }

And then, in the Startup, you could register that listener

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://learn.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));  
    }
}

This would output to an ILogger, you could configure your logger factory to output to a file.

like image 142
malafreniere Avatar answered Sep 04 '25 02:09

malafreniere