Отправка журнала на удаленный MSMQ - PullRequest
2 голосов
/ 23 сентября 2011

Я установил NLog версии 2 и отправка на удаленный 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 с удаленными очередями?

1 Ответ

3 голосов
/ 27 сентября 2011

Итак, я попытался отправить в общедоступную очередь, но она все еще не работала с использованием 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; 
                } 
            } 
...