I've put together a short example of a trace listener I created. For this sample all messages are written to a SQL server table using the custom listener. Any error messages are also written to the console window.
My sample console application that creates trace messages
App.ConfigCode:class CS_ConsoleApp { static void Main(string[] args) { for (int i = 0; i < 20; i++) { if (i >= 0 & i <= 2) { Trace.TraceError("{0} FOUND!!!!! THIS IS TERRIBLE!!!!.", i); } else { if (isPrime(i)) { Trace.TraceInformation("{0} is prime.", i); } else { Trace.TraceWarning("{0} is not prime.", i); } } } Console.ReadLine(); } static bool isPrime(int number) { if (number % 2 == 0) return false; //Even number for (int i = 3; i < number; i += 2) { if (number % i == 0) return false; } return true; }
The class I created to handle (listen) for the messagesCode:<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <trace autoflush="true"> <!-- Trace filters can be set to Information, Warning, Error--> <listeners> <!-- Write Messages to Console --> <add name="consoleListener" type="System.Diagnostics.ConsoleTraceListener"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error" /> </add> <!-- Implement Custom Listener --> <add name="sqlListener" type="SFHP.Automation.Tracing.SqlListener, Tracing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Information"/> </add> </listeners> </trace> </system.diagnostics> </configuration>
Code:public class SqlListener : TraceListener { public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string format, params object[] args) { const string commandText = "INSERT INTO dbo.Logging(host, application, level, logInfo) VALUES (@host, @application, @level, @logInfo)"; if (this.Filter.ShouldTrace(eventCache, source, eventType, id, format, args, null, null) == true) { using (var con = new SqlConnection("server=SomeServer;database=SomeDatabase;trusted_connection=true")) { con.Open(); using (var cmd = new SqlCommand(commandText, con)) { cmd.Parameters.Add("@host", System.Data.SqlDbType.VarChar).Value = System.Environment.MachineName; cmd.Parameters.Add("@application", System.Data.SqlDbType.VarChar).Value = source; ; cmd.Parameters.Add("@level", System.Data.SqlDbType.VarChar).Value = eventType.ToString(); cmd.Parameters.Add("@logInfo", System.Data.SqlDbType.VarChar).Value = string.Format(format, args); cmd.ExecuteNonQuery(); } } } } public override void Write(string message) { throw new System.NotImplementedException(); } public override void WriteLine(string message) { throw new System.NotImplementedException(); } }




Reply With Quote