2012-03-15 38 views
24

我使用log4Net作为我系统的日志。如果appender类型是Log4Net中的AdoNetAppender,那么connectionString节点是强制性的。但是,我已经在我的网站中使用Log4Net的连接字符串。我如何使用log4Net的当前网站的connectionString而不是配置

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

+0

这是作为http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere-同样的问题在 – user1069816 2016-08-16 11:23:41

回答

0

你可以通过继承AdoNetAppender来做到这一点。

  • 1)创建一个继承自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

+0

谢谢minmin,我不能打开你提供的链接,你应该从下面的链接找到我应该找到http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-来自别处项。但它不工作。 – 2012-03-18 14:52:24

14

可以动态更新AdoNetAppender的ConnectionString中,你通常在Global.asax为您的网站log4net的配置后,。在您使用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 
      } 
     } 
    } 
} 
1

你可以通过编写自定义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/一个完整的例子

+0

我用Narayan Akhade的方式。谢谢 – 2012-03-31 13:23:02

34

它相当简单,你只需要替换appender connectionString配置即可。

代替连接字符串:

<connectionString value="[Complete Connection]" /> 

你只需要使用connectionStringName配置:

<connectionStringName value="ApplicationConnection" /> 

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

<connectionStrings> 
    <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" /> 
</connectionStrings> 

不幸的是你必须将connectionType与connectionStrin一起使用的gname,例如:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender"> 
    <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionStringName value="ApplicationConnection" /> 
... 
+1

这是否适用于加密连接字符串?我用纯文本工作,但记录停止时,我加密连接字符串 – raider33 2014-09-22 20:20:38

+0

这对我来说很完美!由于我在不同的环境中使用发布配置文件,这完全是我的一天,因为它大大简化了我必须做的配置工作 – JohanLarsson 2015-12-06 21:10:59

相关问题