你可以从web.config文件中的其他地方拉一个log4net AdoNetAppender的connectionString?

我已经在我的web.config文件中有一个数据库连接string。 我扫描了log4net文档,但似乎无法find在我的web.config文件的log4net部分内使用它的方法。 是可以做这样的事情吗?

<connectionStrings> <add name="connStr" connectionString="Data Source=localhost; ..." /> </connectionStrings> <log4net> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <connectionString connectionStringName="connStr"/> ... </log4net> 

创build一个扩展AdoNetAppender的类 – 比如说WebAppAdoNetAppender 。 在该类中实现ConnectionString属性,并从该属性设置器中的web.config文件中检索连接string。

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

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

可以使用web.config中指定的数据库连接string,而无需创build新类,但需要使用尚未发布的log4net版本。 它可以从SVN仓库下载http://svn.apache.org/viewvc/logging/log4net/trunk/

你的configuration如下所示:

 <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仍然需要指定。

这个将在1.2.11中根据这个来执行。 但是我不知道他们什么时候发布它。

上面的答案都不起作用。 我得到了另一个解决scheme,我试了,它的工作原理:

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

我可以如何使用log4Net的当前网站的connectionString,而不是configuration