2012-03-15 47 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

相關問題