4

Log4NETを使用してDBにログインしたいのですが、いくつかのチュートリアルに従うと、DAOアペンダーの接続文字列を構成する必要があることがわかります。

私はすでにDB接続用の接続文字列をweb.configに持っているので、新しいものを設定する代わりにそれを参照できるかどうか疑問に思っています。

私は通常、接続文字列を変更して開発DBから本番DBに切り替えるので、同じ接続パラメーターを共有すると非常に便利です。

4

1 に答える 1

7

編集: これが投稿されて以来、log4net は構成での接続文字列の指定をサポートするようになりました。https://issues.apache.org/jira/browse/LOG4NET-88から-

これにより、新しい「connectionStringName」属性 (および対応する ConnectionStringName) プロパティが AdoNetAppender クラスに追加されます。<ConnectionStrings>これは、App.config または Web.config ファイルのセクション内の接続文字列への参照です。

この回答には例があります。

セクションで接続文字列が定義されていない場合は、<ConnectionStrings>このクラスを使用して実行時に接続文字列を設定できます。

SetConnectionStringlog4net を構成した直後に、接続文字列を使用して呼び出します。

ただし、次の点に注意してください。

Log4net データベース アペンダは、接続文字列なしで作成されることを嫌い、(内部) エラーをスローします。単体テスト中に、偽の接続文字列を指定すると、テストに 10 秒以上かかることがわかりました。

public static class LogConfigurator
{
   public static void SetConnectionString(string connectionString)
   {
        Hierarchy logHierarchy = log4net.LogManager.GetRepository() as Hierarchy;

        if (logHierarchy == null)
        {
            throw new InvalidOperationException
               ("Can't set connection string as hierarchy is null.");
        }

        var appender = logHierarchy.GetAppenders()
                                   .OfType<AdoNetAppender>()
                                   .SingleOrDefault();

        if (appender == null)
        {
            throw new InvalidOperationException
              ("Can't locate a database appender");
        }

        appender.ConnectionString = connectionString;
        appender.ActivateOptions();
   }
}
于 2012-11-22T10:00:44.510 に答える