WCF自定义跟踪侦听器,用于在没有EnterpriseLibrary的情况下以msmq写入日志

时间:2016-04-04 12:54:50

标签: wcf tracelistener trace-listener

如何编写自定义跟踪侦听器以在msmq中写入消息日志?

2 个答案:

答案 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>