/// <summary>
/// Logging sink that writes messages to the Visual Studio /// <summary>
/// Logging sink that writes messages to the Visual Studio debugger output.
/// </summary>
public class TextBoxListener : CustomTraceListener
{
/// <summary>
/// Property TextBoxToLog (TextBox)
/// </summary>
static public TextBox TextBoxToLog
{
get
{
return st_textBoxToLog;
}
set
{
st_textBoxToLog = value;
}
}
static private TextBox st_textBoxToLog=null;
//In Sink it was overridable SendMessageCore(LogEntry logEntry)
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
string sToWrite = "";
if (data is LogEntry && this.Formatter != null)
{
sToWrite=(this.Formatter.Format(data as LogEntry));
}
else
{
sToWrite=(data.ToString());
}
//this.WriteLine(sToWrite);
if (null != TextBoxToLog)
{
WriteLine(sToWrite);
// System.Diagnostics.Debug.WriteLine(SR.TextBoxSinkMessage(logEntry.EventId,logEntry.Message));
}
}
private static void AppendToTextBox(string results)
{
st_textBoxToLog.Text += results;// +Environment.NewLine;
st_textBoxToLog.SelectAll();
st_textBoxToLog.ScrollToCaret();
}
/// <summary>
/// Writes a message to the debug window
/// </summary>
/// <param name="message">The string to write to the debug window</param>
public override void Write(string message)
{
AppendToTextBox(message);
}
/// <summary>
/// Writes a message to the debug window
/// </summary>
/// <param name="message">The string to write to the debug window</param>
public override void WriteLine(string message)
{
AppendToTextBox(message+ Environment.NewLine);
}
}
The sample testing code is the following:
private void btnLogToTextBox_Click(object sender, EventArgs e)
{
//MNF 17/8/2005 modified customizedSinkButton_Click
try
{
Cursor.Current = Cursors.WaitCursor;
TextBoxListener.TextBoxToLog = this.resultsTextBox;
for (int i = 0; i < 100; i++)
{
LogEntry log = new LogEntry();
log.Message = Properties.Resources.DebugSinkTestMessage + " i= " + i.ToString();
log.Priority = 5;
log.EventId = 100;
log.Categories.Clear();
log.Categories.Add("Debug");
Logger.Write(log);
Logger.Write("My Message", "Debug");
}
TextBoxListener.TextBoxToLog = null;
this.DisplayResults(Properties.Resources.CustomizedSinkEndMessage);
}
finally
{
Cursor.Current = Cursors.Default;
}
}
The changes in app.config are the following:
<configuration>
<configSections>
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" />
</configSections>
<loggingConfiguration tracingEnabled="true" defaultCategory="General">
<categorySources>
<add
name="Debug"
switchValue="All">
<listeners>
<add name="Debug Destination" />
<add name="TextBox Destination" />
</listeners>
</add>
</categorySources>
<listeners>
<add name="TextBox Destination"
type="LoggingQuickStart.TextBoxListener, LoggingQuickStart"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging"
formatter="Text Formatter"
/>
</listeners>
</loggingConfiguration>
</configuration>