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

Aip*_* He 28 c# log4net connection-string

我使用log4Net作为系统的日志.如果appender类型是Log4Net中的AdoNetAppender,则connectionString节点是必需的.但是,我在我的网站上已经有一个使用Log4Net的connectionString.

如何在log4net配置文件中使用log4Net网站的connStr而不是再次配置相同的connstr?

gus*_*ico 38

这很简单,你只需要替换appender connectionString配置.

代替连接字符串:

<connectionString value="[Complete Connection]" />
Run Code Online (Sandbox Code Playgroud)

你只需使用connectionStringName配置:

<connectionStringName value="ApplicationConnection" />
Run Code Online (Sandbox Code Playgroud)

然后你有你的应用程序连接字符串:

 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

不幸的是,您必须拥有connectionTypeconnectionStringName,例如:

<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" />
...
Run Code Online (Sandbox Code Playgroud)

  • 这对加密的连接字符串有效吗?我可以使用纯文本,但是当我加密连接字符串时,日志记录会停止 (2认同)

Nar*_*ade 20

在为您的网站配置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
           }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*tte 7

您现在可以使用AdoNetAppender的ConnectionStringName属性将其指向应用程序或web.config文件中的命名connectionString:

AdoNetAppender.ConnectionStringName属性


Min*_*Min 1

您可以通过继承 AdoNetAppender 来做到这一点。

  • 1)创建一个继承自AdoNetAppender的类。
  • 2) 接下来创建一个 ConnectionStringName 属性,该属性将 Log4Net ConnectionString 属性设置为 .Net ConfigurationManager 检索的连接字符串。
  • 3) 在配置文件的 AdoNetAppender 部分中创建 ConnectionStringName 条目,该条目映射到配置文件的 connectionStrings 部分中的现有连接字符串。

有关详细信息,请参阅下面的“Ken Burkhardt”博客。

http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html