我如何使用当前网站的 connectionString 进行 log4Net 而不是配置

本文关键字:log4Net 进行 配置 connectionString 何使用 网站 | 更新日期: 2023-09-27 18:27:50

我使用log4Net作为我的系统日志。如果追加器类型是 Log4Net 中的 AdoNetAppender,则 connectionString 节点是必需的。但是,我已经在我的网站上有一个连接字符串,我在那里使用Log4Net。

如何将网站的 connStr 用于 log4Net,而不是在 log4net 配置文件中再次配置相同的连接?

我如何使用当前网站的 connectionString 进行 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