2010-03-14 81 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的回答)

相关问题