簡體   English   中英

你可以從web.config文件中的其他地方為log4net AdoNetAppender提取connectionString嗎?

[英]Can you pull the connectionString for a log4net AdoNetAppender from elsewhere in a web.config file?

我的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>

雖然您需要使用尚未發布的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>

請注意,仍然需要指定connectionType

創建一個擴展AdoNetAppender的類 - 比如WebAppAdoNetAppender 在該類中實現ConnectionString屬性,並從該屬性setter中的web.config文件中檢索連接字符串。

<log4net>
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender">
    ...

...

public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender
{
    public new string ConnectionString
    {
        get { return base.ConnectionString; }
        set { base.ConnectionString = ...   }
    }
}

根據這個,這將在1.2.11中實施。 但我不知道他們何時會發布它。

上面的答案都行不通。 我得到了另一個解決方案,我嘗試了它的工作原理:

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
           }
        }
    }
}

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

截至2017年(log4net 2.0.8.0 ),以下工作:

public class MyAdoNetAppender : AdoNetAppender
{
    public MyAdoNetAppender()
    {
        ConnectionString = ...
    }
}


<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">

(非常類似於@Michael Petrotta的回答)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM