如何编写自定义跟踪侦听器以在msmq中写入消息日志?
答案 0 :(得分:0)
如果您使用的是MSMQ托管的代码,并希望编写一条消息来说明日志文件 就System.Diagnostics而言,所有.NET应用程序都是相同的。在app.config中配置侦听器,并使用Trace或TraceSource写入侦听器。 MSDN explains this better than I can
如果您想要一个向MSMSQ发送消息的跟踪侦听器 获取此实用程序库Essential Diagnostics,使得使用System.Diagnostics减轻痛苦
覆盖BaseTraceListener上的一个TraceEvent()方法。在该方法中,您可以使用可用参数将消息发送到您想要的任何内容,例如MSMQ目标。
以通常的方式注册自定义TraceListener。
答案 1 :(得分:0)
我在下面添加了自定义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>