我使用log4Net作为我系统的日志。如果appender类型是Log4Net中的AdoNetAppender,那么connectionString节点是强制性的。但是,我已经在我的网站中使用Log4Net的连接字符串。我如何使用log4Net的当前网站的connectionString而不是配置
如何使用log4Net的网站connStr而不是在log4net配置文件中再次配置相同的connstr?
我使用log4Net作为我系统的日志。如果appender类型是Log4Net中的AdoNetAppender,那么connectionString节点是强制性的。但是,我已经在我的网站中使用Log4Net的连接字符串。我如何使用log4Net的当前网站的connectionString而不是配置
如何使用log4Net的网站connStr而不是在log4net配置文件中再次配置相同的connstr?
你可以通过继承AdoNetAppender来做到这一点。
有关详细信息,请参阅下面的“Ken Burkhardt”博客。
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
谢谢minmin,我不能打开你提供的链接,你应该从下面的链接找到我应该找到http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-来自别处项。但它不工作。 – 2012-03-18 14:52:24
这应该在1.2.11版本是可能的。这里是链接到的问题:
谢谢Stefan我用@Narayan Akhade提供的方式 – 2012-03-18 14:54:06
可以动态更新AdoNetAppender的ConnectionString中,你通常在Global.asax为您的网站log4net的配置后,。在您使用XmlConfigutor()
或其他方法调用log4net后,您可以调用下面的方法来检查所有AdoNetAppender并更新所需的connectionString。
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
}
}
}
}
你可以通过编写自定义ADO.NET的appender并重写连接字符串做到这一点:
public new string ConnectionString {
get {
return base.ConnectionString;
}
//you could set your own connection string here
set {
base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
ConnectionString;
}
}
,您可以参观http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/一个完整的例子
我用Narayan Akhade的方式。谢谢 – 2012-03-31 13:23:02
您现在可以使用的connectionStringName AdoNetAppender的属性会将它指向您的应用或web.config文件中指定的connectionString:
它相当简单,你只需要替换appender connectionString
配置即可。
代替连接字符串:
<connectionString value="[Complete Connection]" />
你只需要使用connectionStringName
配置:
<connectionStringName value="ApplicationConnection" />
然后你有你的应用程序连接字符串:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
不幸的是你必须将connectionType
与connectionStrin一起使用的gname,例如:
<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="ApplicationConnection" />
...
这是否适用于加密连接字符串?我用纯文本工作,但记录停止时,我加密连接字符串 – raider33 2014-09-22 20:20:38
这对我来说很完美!由于我在不同的环境中使用发布配置文件,这完全是我的一天,因为它大大简化了我必须做的配置工作 – JohanLarsson 2015-12-06 21:10:59
这是作为http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere-同样的问题在 – user1069816 2016-08-16 11:23:41