我如何使用当前网站的 connectionString 进行 log4Net 而不是配置
本文关键字:log4Net 进行 配置 connectionString 何使用 网站 | 更新日期: 2023-09-27 18:27:50
我使用log4Net作为我的系统日志。如果追加器类型是 Log4Net 中的 AdoNetAppender,则 connectionString 节点是必需的。但是,我已经在我的网站上有一个连接字符串,我在那里使用Log4Net。
如何将网站的 connStr 用于 log4Net,而不是在 log4net 配置文件中再次配置相同的连接?
这很简单,你只需要替换附加器connectionString
配置。
代替连接字符串:
<connectionString value="[Complete Connection]" />
您只需使用connectionStringName
配置:
<connectionStringName value="ApplicationConnection" />
然后,您有应用程序连接字符串:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
不幸的是,您必须具有带有 connectionStringName 的connectionType
,例如:
<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" />
...
您的网站配置 log4net 之后,您可以在 Global.asax 中动态更新 AdoNetAppender 的 ConnectionString。在您调用后使用 XmlConfigutor()
或其他东西配置 log4net..您可以调用以下方法,该方法检查所有 AdoNetAppender 并更新所需的连接字符串。
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 Property
您可以通过继承 AdoNetAppender 来实现此目的。
- 1( 创建一个继承自 AdoNetAppender 的类。
- 2( 接下来创建一个 ConnectionStringName 属性,该属性将 Log4Net ConnectionString 属性设置为由 .Net ConfigurationManager 检索的连接字符串。
- 3( 在配置文件的 AdoNetAppender 部分中创建一个 ConnectionStringName 条目,该条目映射到配置文件的 connectionString 部分中的现有 connectionString。
有关详细信息,请参阅下面的"Ken Burkhardt"博客。
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
编写自定义 ADO.NET 追加器并重写连接字符串来执行此操作:
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/以获取完整示例
这在 1.2.11 版本中应该是可能的。以下是该问题的链接:
https://issues.apache.org/jira/browse/LOG4NET-88