WCF自定义跟踪侦听器,用于在不带EnterpriseLibrary的msmq中写入日志



如何编写自定义跟踪侦听器以在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。

最新更新