如何编写自定义跟踪侦听器以在msmq中编写消息日志?
我在下面添加了自定义MSMQTraceListener:
public class MSMQTraceListener : TraceListener
{
string _queueName;
public MSMQTraceListener(string queueName)
: base("MSMQListener")
{
_queueName = queueName;
if (!MessageQueue.Exists(_queueName))
MessageQueue.Create(_queueName);
}
public override void Write(string message)
{
SendMessageToQueue(message);
}
public override void WriteLine(string message)
{
SendMessageToQueue(message);
}
/// <summary>
/// Send message to queue.
/// </summary>
/// <param name="message">string: message</param>
private void SendMessageToQueue(string message)
{
try
{
MessageQueue messageQueue = new MessageQueue(_queueName, QueueAccessMode.Send);
messageQueue.Label = DateTime.Now.ToString();
messageQueue.Send(message);
messageQueue.Close();
}
catch (Exception ex)
{
}
}
}
并在我的web.config文件中更新了以下诊断设置:
<system.diagnostics>
<sources>
<source name="System.ServiceModel.MessageLogging">
<listeners>
<add name="messages" type="Proj.Common.Diagnostics.MSMQTraceListener,Proj.Common" initializeData=".private$PerformanceTesting" />
</listeners>
</source>
</sources>
</system.diagnostics>
如果您在MSMQ托管的代码中,并且希望编写一条消息来表示日志文件就System.Diagnostics而言,所有.NET应用程序都是相同的。在app.config中配置侦听器,并使用Trace或TraceSource写入侦听器。MSDN对此的解释比我更好。
如果您想要一个向MSMSQ发送消息的跟踪侦听器获取这个实用程序库,Essential Diagnostics,使使用System.Diagnostics的不那么痛苦
重写BaseTraceListener上的一个TraceEvent()方法。在该方法中,您可以使用可用的参数将消息发送到您想要的任何位置,例如MSMQ目标。
以常规方式注册您的自定义TraceListener。