[英]Can you pull the connectionString for a log4net AdoNetAppender from elsewhere in a web.config file?
我的web.config文件中已经有一个db连接字符串。 我扫描了log4net文档,但似乎找不到在我的web.config文件的log4net部分中使用它的方法。 有可能做这样的事吗?
<connectionStrings>
<add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionString connectionStringName="connStr"/>
...
</log4net>
虽然您需要使用尚未发布的log4net构建,但可以使用web.config中指定的DB连接字符串而无需创建新类。 它可以从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
。
创建一个扩展AdoNetAppender
的类 - 比如WebAppAdoNetAppender
。 在该类中实现ConnectionString
属性,并从该属性setter中的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.2.11中实施。 但我不知道他们何时会发布它。
上面的答案都行不通。 我得到了另一个解决方案,我尝试了它的工作原理:
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
}
}
}
}
截至2017年(log4net 2.0.8.0
),以下工作:
public class MyAdoNetAppender : AdoNetAppender
{
public MyAdoNetAppender()
{
ConnectionString = ...
}
}
<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">
(非常类似于@Michael Petrotta的回答)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.