web-dev-qa-db-ja.com

log4net AdoNetAppenderのconnectionStringを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>
43
MrSharps

AdoNetAppenderを拡張するクラスを作成します-たとえば、WebAppAdoNetAppender。そのクラスにConnectionStringプロパティを実装し、そのプロパティセッターの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 = ...   }
    }
}
32

まだリリースされていない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を指定する必要があることに注意してください。

48
10p

fyiこれは this に従って1.2.11で実装されます。しかし、いつリリースされるかはわかりません。

5
Stefan Egli

上記の答えはすべて機能しません。私はこれに対する別の解決策を得ました、私は試しました、そしてそれはうまくいきました:

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

構成する代わりにlog4Netに現在のWebサイトのconnectionStringを使用する方法

5
Aiping He

2017年現在(log4net 2.0.8.0)、次の作品:

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


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

(@Michael Petrottaの回答に非常に似ています)

0
turdus-merula