2011-09-23 100 views
2

我安裝了NLog版本2併發送到遠程MSMQ不起作用。我有正確的配置設置嗎?發送日誌到遠程MSMQ

<nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <targets> 
     <target xsi:type="MSMQ" name="MSMQLog" useXmlEncoding="true" queue="FormatName:DIRECT=OS:server01\private$\test_log" recoverable="true" /> 
    </targets> 
    <rules> 
     <logger name="*" minlevel="Trace" writeTo="MSMQLog" /> 
    </rules> 
    </nlog> 

我在本地盒子和服務器上安裝了MSMQ。 NLog不會拋出任何異常(它們已打開)。我在本地計算機上的傳出郵箱中看不到任何內容。

我可以通過使用以下代碼發送到隊列。

using (var queue = new MessageQueue(@"FormatName:DIRECT=OS:server01\private$\tasi_log")) 
       { 
        var message = new Message("TEST"); 
        message.Formatter = new BinaryMessageFormatter(); 
        queue.Send(message); 
       } 

NLog是否與遠程隊列一起工作?

回答

3

所以我試圖發送到公共隊列,它仍然不能使用NLog。所以,我查看了NLog.Extended源代碼,並找到了這個方法。

protected override void Write(LogEventInfo logEvent) 
     { 
      if (this.Queue == null) 
      { 
       return; 
      } 

      string queue = this.Queue.Render(logEvent); 

      if (!MessageQueue.Exists(queue)) 
      { 
       if (this.CreateQueueIfNotExists) 
       { 
        MessageQueue.Create(queue); 
       } 
       else 
       { 
        return; 
       } 
      } 

      using (MessageQueue mq = new MessageQueue(queue)) 
      { 
       Message msg = this.PrepareMessage(logEvent); 
       if (msg != null) 
       { 
        mq.Send(msg); 
       } 
      } 
     } 

我註釋掉了下面的if語句,它現在發送到遠程隊列。有人可以驗證這一點?這是一個錯誤,還是我錯過了什麼?

if (!MessageQueue.Exists(queue)) 
      { 
       if (this.CreateQueueIfNotExists) 
       { 
        MessageQueue.Create(queue); 
       } 
       else 
       { 
        return; 
       } 
      }