我安装了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是否可以使用远程队列?
答案 0 :(得分: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;
}
}