我正在尝试使用 Log4Net 向 MSMQ 队列发送消息。我花了很多时间从网上了解该功能。但我找不到太多帮助。以下是我的源代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
using log4net.Config;
namespace MQTest
{
class Program
{
private static readonly ILog ilogger = LogManager.GetLogger("");
static void Main(string[] args)
{
ilogger.Debug("This should go to the queue");
ilogger.Fatal("This should go to the queue");
}
}
}
应用程序配置
<log4net>
<appender name="MsmqAppender" type="MQTest.Appender.MsmqAppender, MQTest">
<queueName value="private$\test_queue"/>
<labelLayout value="LOG [%level] %date"/>
<layout type="log4net.Layout.XmlLayoutSchemaLog4j"/>
</appender>
<root>
<level value="ALL"/>
<appender-ref ref="MsmqAppender" />
</root>
</log4net>
当我调试代码时,我注意到 IsDebugEnabled = false、IsFatalEnabled =false 等。 我不知道如何在使用 MsmqAppender 时填充上述标志。
谢谢你的帮助
最佳答案
你没有正确设置它。
您已经定义了 appender 并将其注册到配置文件中,因此当您想要记录某些内容时,只需使用 ILog
您从日志管理器获得的记录器,您不需要创建 logMSMQ 的实例:
myLogger.Debug("This should go to the queue");
查看 appender 和配置,有几件事很突出:
你不应该调用
XmlConfigurator.Configure();
从 appender 中您没有在配置中正确注册 appender:您需要 specify it by type and assembly namespace ,例如:
<appender name="MsmqAppender" type="AssemblyNamespace.MSMQTest.LogMSMQ, AssemblyNamespace">
您没有在根记录器配置中按名称指定它:
<root> <level value="ALL" /> <appender-ref ref="MsmqAppender" /> </root>
在设置过程中,打开 log4net internal debugging因为它将帮助您了解正在发生的事情。
关于c# - 如何使用 Log4Net 将数据发送到 MSMQ 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953996/