我如何使用当前网站的connectionString for log4Net而不是配置

我使用log4Net作为系统的日志。 如果appender类型是Log4Net中的AdoNetAppender,则connectionString节点是必需的。 但是,我在我的网站上已经有一个使用Log4Net的connectionString。

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

这很简单,你只需要替换appender connectionString配置。

代替连接字符串:

  

您只需使用connectionStringName配置:

  

然后你有你的应用程序连接字符串:

     

不幸的是,您必须具有connectionType与connectionStringName,例如:

    ... 

在为您的网站配置log4net之后,您可以动态更新AdoNetAppender的ConnectionString,通常在Global.asax中。 在您使用XmlConfigutor()或其他东西调用配置log4net之后,您可以调用下面的方法来检查所有AdoNetAppenders并更新所需的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 } } } } 

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

AdoNetAppender.ConnectionStringName属性

您可以通过编写自定义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; } } 

您可以访问http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/获取完整示例

您可以通过inheritanceAdoNetAppender来实现。

  • 1)创建一个inheritance自AdoNetAppender的类。
  • 2)接下来创建一个ConnectionStringName属性,该属性将Log4Net ConnectionString属性设置为.Net ConfigurationManager检索的连接字符串。
  • 3)在配置文件的AdoNetAppender部分中创建一个ConnectionStringName条目,该部分映射到配置文件的connectionStrings部分中的现有connectionString。

有关详细信息,请参阅下面的“Ken Burkhardt”博客。

http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html

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

https://issues.apache.org/jira/browse/LOG4NET-88