C# 如何将当前网站的connectionString用于log4Net而不是配置

C# 如何将当前网站的connectionString用于log4Net而不是配置,c#,log4net,connection-string,C#,Log4net,Connection String,我使用log4Net作为系统日志。如果appender类型是Log4Net中的AdoneAttender,则connectionString节点是必需的。然而,我已经在我的网站上有了一个使用Log4Net的连接字符串 如何使用log4Net网站的connStr,而不是在log4Net配置文件中再次配置相同的connStr?您可以通过继承AdoNetAppender来实现这一点 1) 创建从AdoNetAppender继承的类 2) 接下来,创建一个ConnectionString属性,该属性将

我使用log4Net作为系统日志。如果appender类型是Log4Net中的AdoneAttender,则connectionString节点是必需的。然而,我已经在我的网站上有了一个使用Log4Net的连接字符串


如何使用log4Net网站的connStr,而不是在log4Net配置文件中再次配置相同的connStr?

您可以通过继承AdoNetAppender来实现这一点

  • 1) 创建从AdoNetAppender继承的类
  • 2) 接下来,创建一个ConnectionString属性,该属性将Log4Net ConnectionString属性设置为.Net ConfigurationManager检索的连接字符串
  • 3) 在配置文件的AdoNetAppender部分中创建一个connectionString条目,该条目映射到配置文件connectionString部分中的现有connectionString
有关详细信息,请参阅下面的“肯·布克哈特”博客


这在1.2.11版中应该是可能的。以下是该问题的链接:


在为网站配置log4net后,您可以动态更新AdoNetAppender的ConnectionString,通常在Global.asax中。调用后,使用
XmlConfigutor()
或其他方法配置log4net。。您可以调用下面的方法,该方法检查所有ADONetAppender并更新所需的connectionString

private static void ConfigureLog4Net()
{
    Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
    if(hierarchy != null && hierarchy.Configured)
    {
        foreach(IAppender appender in hierarchy.GetAppenders())
        {
           if(appender is AdoNetAppender)
           {
               var adoNetAppender = (AdoNetAppender)appender;
               adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString();
               adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
           }
        }
    }
}

可以通过编写自定义ADO.NET appender并重写连接字符串来完成此操作:

public new string ConnectionString {
    get { 
        return base.ConnectionString; 
    }

    //you could set your own connection string here
    set { 
        base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
            ConnectionString; 
    }
}
<connectionString value="[Complete Connection]" />
 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>

您可以访问以获取完整的示例

您现在可以使用AdoNetAppender的connectionString属性将其指向应用程序或web.config文件中的命名connectionString:


非常简单,只需更换appender
connectionString
配置即可

代替连接字符串:

public new string ConnectionString {
    get { 
        return base.ConnectionString; 
    }

    //you could set your own connection string here
    set { 
        base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
            ConnectionString; 
    }
}
<connectionString value="[Complete Connection]" />
 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>
然后您就有了应用程序连接字符串:

public new string ConnectionString {
    get { 
        return base.ConnectionString; 
    }

    //you could set your own connection string here
    set { 
        base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
            ConnectionString; 
    }
}
<connectionString value="[Complete Connection]" />
 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>

谢谢minmin,我无法打开你提供的链接,你告诉我的应该从下面的链接中找到。谢谢Stefan我用了@Narayan Akhadei提供的方式用了Narayan Akhade提供的方式。谢谢这对加密的连接字符串有效吗?我让它与纯文本工作,但日志停止时,我加密的连接字符串这对我来说工作完美!由于我在不同的环境中使用发布配置文件,这让我很开心,因为它大大简化了我必须做的事情,使配置工作正常。这与