【问题标题】:WCF Custom trace listener to write logs in msmq without EnterpriseLibraryWCF 自定义跟踪侦听器在没有 EnterpriseLibrary 的情况下在 msmq 中写入日志
【发布时间】:2016-07-24 00:46:22
【问题描述】:

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

【问题讨论】:

    标签: wcf tracelistener trace-listener


    【解决方案1】:

    我在下面添加了自定义 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>
    

    【讨论】:

      【解决方案2】:

      如果您在 MSMQ 托管的代码中并想写一条消息来说明日志文件 就 System.Diagnostics 而言,所有 .NET 应用程序都是相同的。在 app.config 中配置监听器,使用 Trace 或 TraceSource 写入监听器。 MSDN explains this better than I can.

      如果您想要一个向 MSMSQ 发送消息的跟踪侦听器 获取这个实用程序库 Essential Diagnostics,它可以减少使用 System.Diagnostics 的痛苦

      覆盖BaseTraceListener 上的一个 TraceEvent() 方法。在该方法中,您可以使用可用参数将消息发送到您想要的任何位置,例如 MSMQ 目标。

      以通常的方式注册您的自定义 TraceListener。

      【讨论】:

      • 感谢@MatthewMartin,您提到的几点非常有帮助。为了满足我的要求,我编写了答案中给出的自定义侦听器。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      • 2016-05-12
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多