c# - 如何使用 Log4Net 将数据发送到 MSMQ 队列?

标签 c# visual-studio-2008 log4net

我正在尝试使用 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 和配置,有几件事很突出:

  1. 你不应该调用 XmlConfigurator.Configure();从 appender 中

  2. 您没有在配置中正确注册 appender:您需要 specify it by type and assembly namespace ,例如:<appender name="MsmqAppender" type="AssemblyNamespace.MSMQTest.LogMSMQ, AssemblyNamespace">

  3. 您没有在根记录器配置中按名称指定它:

<root>
  <level value="ALL" />
  <appender-ref ref="MsmqAppender" />
</root>

在设置过程中,打开 log4net internal debugging因为它将帮助您了解正在发生的事情。

关于c# - 如何使用 Log4Net 将数据发送到 MSMQ 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26953996/

相关文章:

visual-studio-2008 - 是否可以使用 Visual Studio 和 MS XNA Game Studio SDK 编写商业 XBOX 游戏?

visual-studio-2008 - Visual Studio 热键在代码隐藏和源文件之间切换?

vb.net - 如何阻止空格键点击按钮

c# - 在 log4net 中以编程方式更改日志级别?

c# - 使用项目程序集信息的 log4net 文件路径

c# - log4net 不给出任何响应或记录

c# - 在应用程序设计方面需要帮助

c# - 带有数据源和组合框的数据 GridView

c# - 如何将以毫秒为单位的日期时间插入到 Access 数据库中?

c# - 立即更改 namespace