你可以从web.config文件中的其他地方为log4net AdoNetAppender提取connectionString吗?

MrS*_*rps 42 c# asp.net log4net web-config

我的web.config文件中已经有一个db连接字符串.我扫描了log4net文档,但似乎找不到在我的web.config文件的log4net部分中使用它的方法.有可能做这样的事吗?

<connectionStrings>
    <add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <connectionString connectionStringName="connStr"/>
      ...
</log4net>
Run Code Online (Sandbox Code Playgroud)

10p*_*10p 47

虽然您需要使用尚未发布的log4net构建,但可以使用web.config中指定的DB连接字符串而无需创建新类.它可以从SVN存储库下载http://svn.apache.org/viewvc/logging/log4net/trunk/

您的配置如下所示:

<connectionStrings>
    <add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>

<log4net>
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionStringName value="connStr" />
      ...
</log4net>
Run Code Online (Sandbox Code Playgroud)

请注意,connectionType仍需要指定.

  • 现在可以在最新版本1.2.11中找到它.工作良好. (15认同)

Mic*_*tta 32

创建一个扩展的类AdoNetAppender- 比方说WebAppAdoNetAppender.ConnectionString在该类中实现该属性,并从该属性setter中的web.config文件中检索连接字符串.

<log4net>
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender">
    ...
Run Code Online (Sandbox Code Playgroud)

...

public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender
{
    public new string ConnectionString
    {
        get { return base.ConnectionString; }
        set { base.ConnectionString = ...   }
    }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*gli 5

根据这个,这将在1.2.11中实施.但我不知道他们何时会发布它.


Aip*_* He 5

以上所有答案都不起作用。我为此找到了另一个解决方案,我尝试过并且有效:

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)

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