一個做到這一點的方法是創建一個自定義的TraceListener。然後在app.config中將listnerDataType設置爲CustomTraceListenerData。這允許ConsoleTraceListener具有格式化輸出。輸出格式按預期格式化。沒有格式化程序,所有的值都被返回。自定義TraceListener和app.config都被附加。
該代碼使用5.0.505.0而不是原來的問題提出的4.1。
此代碼取自本網站:java2s firstbricks » FirstBricks » EntLib » Logging » Extensions » ConsoleTraceListener.cs(cache)。 刪除了評論以便使代碼更易於在StackOverflow上閱讀,並且默認顏色已從白色更改爲灰色。
namespace Eab.Logging
{
using System;
using System.Diagnostics;
using Microsoft.Practices.EnterpriseLibrary.Common.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging;
using Microsoft.Practices.EnterpriseLibrary.Logging.Configuration;
using Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners;
[ConfigurationElementType(typeof(CustomTraceListenerData))]
public class ConsoleTraceListener : CustomTraceListener
{
public override void TraceData(TraceEventCache eventCache, string source, TraceEventType eventType, int id, object data)
{
if (data is LogEntry && Formatter != null) {
LogEntry le = (LogEntry)data;
WriteLine(Formatter.Format(le), le.Severity);
} else {
WriteLine(data.ToString());
}
}
public override void Write(string message)
{
Console.ForegroundColor = ConsoleColor.Gray;
Console.Write(message);
}
public override void WriteLine(string message)
{
Console.ForegroundColor = ConsoleColor.Gray;
Console.WriteLine(message);
}
public void WriteLine(string message, TraceEventType severity)
{
ConsoleColor color;
switch (severity) {
case TraceEventType.Critical:
case TraceEventType.Error:
color = ConsoleColor.Red;
break;
case TraceEventType.Warning:
color = ConsoleColor.Yellow;
break;
case TraceEventType.Information:
color = ConsoleColor.Cyan;
break;
case TraceEventType.Verbose:
default:
color = ConsoleColor.Gray;
break;
}
Console.ForegroundColor = color;
Console.WriteLine(message);
}
}
}
<loggingConfiguration name="" tracingEnabled="true" defaultCategory="General">
<listeners>
<!-- Namespace+class, applicationName -->
<add
type="Eab.Logging.ConsoleTraceListener, Eab.Logging"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.CustomTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
formatter="Simple Formatter"
name="Console Listener" />
</listeners>
<formatters>
<add type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.505.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
template="{timestamp(local:[MM/dd/yyyy HH:mm:ss.fff])} : ({title}) {message}"
name="Simple Formatter" />
</formatters>
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="Console Listener" />
</listeners>
</add>
</categorySources>
<specialSources>
<notProcessed switchValue="All" name="Unprocessed Category">
<listeners>
<add name="Console Listener" />
</listeners>
</notProcessed>
<errors switchValue="All" name="Logging Errors & Warnings">
<listeners>
<add name="Console Listener" />
</listeners>
</errors>
</specialSources>
</loggingConfiguration>