log4net - ADONetAppender问题

时间:2017-12-05 12:49:54

标签: c# .net logging log4net

我有一个log4net的问题,我似乎找不到答案。我已将log4net设置为以编程方式配置(请参阅here)。应该使用log4net的C#/ .NET应用程序是一个接口服务器,它提供用于将数据从一个系统(ERP,CRM,...)传输到另一个系统的插件。对于每次传输,您可以配置一个发送插件和一个接收插件,它构建了一个所谓的“订单”。每个订单都从源表中读取特定的数据类型(例如ADDRESS或PROJECT),并包含字段映射以将源字段映射到目标字段。

订单使用独立的log4net记录器实例(按实例名称区分)进行记录,对于每个订单,可以设置不同的日志级别。所有记录器实例都使用相同的ADONetAppender,并作为每个类的私有成员对象创建。此外,ADONetAppender在启动时创建,并在使用protected static readonly IAppender adonet = LoggingHelper.FindAppender("DB_Appender");日志记录的每个类中引用。该功能实现如下:

   public static IAppender FindAppender(string appenderName)
    {
        foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
        {
            if (appender.Name == appenderName)
            {
                return appender;
            }
        }

        return null;
    }

到目前为止一切正常,除了两件事:

  1. 当应用程序第一次启动时(或者甚至在重新启动应用程序之后),在每个订单的第一次运行时,日志级别似乎设置为ERROR,即使它默认设置为DEBUG创建每个实例并调试记录器否则显示。

  2. 同样,每个订单都可以手动触发和停止。当停止订单时,log4net会停止记录此订单的内容,即使记录器和订单的相应C#/ .NET实例仍然存在且未被GC删除或在应用程序中手动删除。我已经尝试了ADONetAppender的BufferSize,但这似乎没有办法。这是log4net有意保存资源的吗?我错过了一些相当明显的东西吗?

  3. 如果有必要,我可以从源代码中提供一些摘录,但由于这是一个企业级应用程序,我现在不愿意。

0 个答案:

没有答案
相关问题