我如何使用当前网站的connectionString for log4Net而不是配置
我使用log4Net作为系统的日志。 如果appender类型是Log4Net中的AdoNetAppender,则connectionString节点是必需的。 但是,我在我的网站上已经有一个使用Log4Net的connectionString。
如何在log4net配置文件中使用log4Net网站的connStr而不是再次配置相同的connstr?
这很简单,你只需要替换appender connectionString
配置。
代替连接字符串:
您只需使用connectionStringName
配置:
然后你有你的应用程序连接字符串:
不幸的是,您必须具有connectionType
与connectionStringName,例如:
...
在为您的网站配置log4net之后,您可以动态更新AdoNetAppender的ConnectionString,通常在Global.asax中。 在您使用XmlConfigutor()
或其他东西调用配置log4net之后,您可以调用下面的方法来检查所有AdoNetAppenders并更新所需的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 } } } }
您现在可以使用AdoNetAppender的ConnectionStringName属性将其指向应用程序或web.config文件中的命名connectionString:
AdoNetAppender.ConnectionStringName属性
您可以通过编写自定义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/获取完整示例
您可以通过inheritanceAdoNetAppender来实现。
- 1)创建一个inheritance自AdoNetAppender的类。
- 2)接下来创建一个ConnectionStringName属性,该属性将Log4Net ConnectionString属性设置为.Net ConfigurationManager检索的连接字符串。
- 3)在配置文件的AdoNetAppender部分中创建一个ConnectionStringName条目,该部分映射到配置文件的connectionStrings部分中的现有connectionString。
有关详细信息,请参阅下面的“Ken Burkhardt”博客。
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
这应该可以在版本1.2.11中实现。 以下是该问题的链接: