2012-11-22 48 views
4

我想使用Log4NET登錄到我的數據庫,並遵循一些教程,我看到我必須爲DAO appender配置一個連接字符串。Log4NET AdoNetAppender連接字符串參考

我已經有一個連接字符串在我的web.config數據庫連接,所以我想知道如果我可以參考,而不是設置一個新的。

我通常會更改連接字符串以從開發數據庫切換到生產數據庫,因此共享相同的連接參數可能非常有用。

回答

6

編輯:自發布以來,log4net現在支持在配置中指定連接字符串名稱。從https://issues.apache.org/jira/browse/LOG4NET-88 -

這會爲AdoNetAppender類添加一個新的「connectionStringName」屬性(和相應的ConnectionStringName)屬性。這是對App.config或Web.config文件的<ConnectionStrings>部分中的連接字符串的引用。

有一個例子this answer

如果你沒有在<ConnectionStrings>節定義,那麼你可以使用這個類在運行時設置連接字符串連接字符串:

您調用SetConnectionString與你配置的log4net剛過連接字符串。

不過,也有幾件事情我想指出:

log4net的數據庫追加程序不喜歡沒有一個連接字符串創建,並拋出一個(內部)錯誤 - 和單元測試過程中,我已經給出假連接字符串時,看到的測試需要10秒以上。

public static class LogConfigurator 
{ 
    public static void SetConnectionString(string connectionString) 
    { 
     Hierarchy logHierarchy = log4net.LogManager.GetRepository() as Hierarchy; 

     if (logHierarchy == null) 
     { 
      throw new InvalidOperationException 
       ("Can't set connection string as hierarchy is null."); 
     } 

     var appender = logHierarchy.GetAppenders() 
            .OfType<AdoNetAppender>() 
            .SingleOrDefault(); 

     if (appender == null) 
     { 
      throw new InvalidOperationException 
       ("Can't locate a database appender"); 
     } 

     appender.ConnectionString = connectionString; 
     appender.ActivateOptions(); 
    } 
} 
+0

完美,謝謝!拯救了我們的生命:) – Joe