2010-03-14 70 views
41

我的web.config文件中已經有了一個db連接字符串。我掃描了log4net文檔,但似乎無法找到在我的web.config文件的log4net部分內使用它的方法。是可以做這樣的事情嗎?您可以從web.config文件中的其他位置獲取log4net AdoNetAppender的connectionString嗎?

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=localhost; ..." /> 
</connectionStrings> 

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionString connectionStringName="connStr"/> 
     ... 
</log4net> 

回答

32

創建擴展AdoNetAppender類 - 說,WebAppAdoNetAppender。在該類中實現ConnectionString屬性,並從該屬性設置器中的web.config文件中檢索連接字符串。

<log4net> 
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender"> 
    ... 

...

public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender 
{ 
    public new string ConnectionString 
    { 
     get { return base.ConnectionString; } 
     set { base.ConnectionString = ... } 
    } 
} 
+1

Stefan Egli的鏈接指出一個參數尚不存在。就目前而言,這似乎是最好的方式去做。感謝Petrotta先生! – MrSharps 2010-03-14 12:50:49

+0

如何以及在哪裏加載/調用/使用這個類?我剛剛開始使用log4net,我發現文檔有點稀疏。我在一個Quartz.NET作業中運行它,它爲我實例化記錄器。我將如何用我自己的子類來替換默認記錄器?謝謝。 – InteXX 2015-02-21 02:37:30

5

FYI這將是1.2.11根據this實施。但是我不知道他們什麼時候發佈它。

+0

聽起來像我想要的功能即將到來 – MrSharps 2010-03-14 12:49:25

+2

1.2.11終於發佈了... – 2012-03-16 09:12:42

46

雖然您需要使用尚未發佈的log4net版本,但可以使用web.config中指定的數據庫連接字符串而不創建新類。它可以從SVN倉庫http://svn.apache.org/viewvc/logging/log4net/trunk/

你的配置將如下所示下載:

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=localhost; ..." /> 
</connectionStrings> 

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    <connectionStringName value="connStr" /> 
     ... 
</log4net> 

請注意,connectionType仍有待確定。

+15

這是現在可用的最新版本,1.2.11。工作正常。 – dove 2011-12-22 12:15:58

4

以上答案都不起作用。我得到這個另一種解決方案,我想和它的工作:

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 
      } 
     } 
    } 
} 

How i can use the connectionString of the current website for log4Net instead of configuring

+0

我也無法得到上面的代碼工作*,這做*。 對我來說,我不得不確保在config中有一個空白的ConnectionString: 2014-01-10 14:41:38

0

2017年(log4net的2.0.8.0),以下工作:

public class MyAdoNetAppender : AdoNetAppender 
{ 
    public MyAdoNetAppender() 
    { 
     ConnectionString = ... 
    } 
} 


<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender"> 

(非常類似於@邁克爾Petrotta的回答)

相關問題