Remote trace listener

Code first, ask questions later

// servicecontract
[ServiceContract]
public interface ITraceWritable
{
   [OperationContract]
   void Write(string msg);
}
// proxy
public partial class RemoteTraceClient : ClientBase<ITraceWritable>, ITraceWritable
{
   public RemoteTraceClient() : base(new NetTcpBinding(), new EndpointAddress("net.tcp://localhost:9000/tracer")) { }
   public void Write(string msg)
   {
      Channel.Write(msg);
   }
}
// TraceListener implementation
public class RemoteTraceListener : TraceListener
{
   public override void WriteLine(string message)
   {
      Write(message + "\n");
   }
   public override void Write(string message)
   {
      using (var client = new RemoteTraceClient())
      {
         client.Open();
         client.Write(message);
         client.Close();
      }
   }
}
// Service implementation
[ServiceBehavior(InstanceContextMode=InstanceContextMode.Single)]
public class TraceLog : ITraceWritable
{
   public void Write(string msg)
   {
      Console.Write(msg);
   }
}
// usage in application to trace to
using (ServiceHost host = new ServiceHost(new TraceLog(), new Uri("net.tcp://localhost:9000/tracer")))
{
   host.AddServiceEndpoint(typeof(ITraceWritable), new NetTcpBinding(), "");
   host.Open();
   Console.WriteLine("Press enter to exit");
   Console.ReadLine();
   host.Close();
}

// usage in application to trace from
System.Diagnostics.Trace.Listeners.Add(new RemoteTraceListener());
System.Diagnostics.Trace.TraceInformation("Added remote tracelistener");

Now my trace messages are directly visible in a console window. This is a great help with debugging. Of course this can be applied to existing applications via the config file….

<system.diagnostics>
  <trace>
    <listeners>
      <add name="remote" type="[NameSpace].RemoteTraceListener, [Assembly]"/>
    </listeners>
  </trace>      
</system.diagnostics>

About erictummers

My work as a recruited developer changes almost every month. I like challenges and sharing the solutions with others. On my blog I’ll mostly post about my work, but expect an occasional home project, productivity tip and tooling review.
This entry was posted in Development and tagged , , . Bookmark the permalink.

2 Responses to Remote trace listener

  1. Dan M says:

    Thanks for the blurb. A little *.sln with your code would’ve been nice!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s