【发布时间】:2016-07-24 00:46:22
【问题描述】:
如何编写自定义跟踪侦听器以在 msmq 中写入消息日志?
【问题讨论】:
标签: wcf tracelistener trace-listener
如何编写自定义跟踪侦听器以在 msmq 中写入消息日志?
【问题讨论】:
标签: wcf tracelistener trace-listener
我在下面添加了自定义 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 explains this better than I can.
如果您想要一个向 MSMSQ 发送消息的跟踪侦听器 获取这个实用程序库 Essential Diagnostics,它可以减少使用 System.Diagnostics 的痛苦
覆盖BaseTraceListener 上的一个 TraceEvent() 方法。在该方法中,您可以使用可用参数将消息发送到您想要的任何位置,例如 MSMQ 目标。
以通常的方式注册您的自定义 TraceListener。
【讨论】: