2

別のアプリケーションのアドイン アーキテクチャによって使用されるライブラリを開発しました。私のライブラリでは、ログに log4net を使用しています。

これは、app.config の場所が解決され、log4net が以下を使用して構成されているため、テストでは正常に機能します。

log4net.Config.XmlConfigurator.Configure();

アドインとして読み込まれた場合、このメソッドを使用してアプリケーション構成を解決することはできません。

1 つのオプションは、アドイン アーキテクチャを介して渡される構成を使用して log4net を構成することです。使用できる構成は、次の結果のようになります。

string asmFile = System.Reflection.Assembly.GetExecutingAssembly().Location;
System.Configuration.Configuration dllConfig = System.Configuration.ConfigurationManager.OpenExeConfiguration(asmFile);

System.Configuration.Configurationをlog4net.Config.XmlConfiguratorでどのように使用できますか?

構成から該当する ConfigurationSection を確認できますが、XmlConfigurator.Configure()で必要な ILoggerRepository または XmlElement を簡単に取得する方法がわかりません。

System.Configuration.ConfigurationSection configSection = configuration.GetSection("log4net");
4

2 に答える 2

2

これは私がこれまでに思いついた中で最高のものであり、特に堅牢ではないようです。

if (configuration.HasFile)
{
        System.IO.FileInfo configFileInfo = new System.IO.FileInfo(configuration.FilePath);
        log4net.Config.XmlConfigurator.Configure(configFileInfo);
}

XmlSerializer を使用して構成を XmlDocument に書き込み、その XmlElement を Configure に渡すことを考えましたが、構成をシリアル化できませんでした。

于 2011-03-03T23:05:10.463 に答える
0

彼らがそれをどのように消費するか (私が公開する API 以外) を制御することはできませんが、構成する方法を提供する必要があります。

log4net ラッパーは dll にあります。このロギング フレームワークを使用するプロジェクトは、webservices/clients の構成ファイルに log4net 構成ブロックを追加するだけです。

それに加えて、プログラムは起動時にこれを呼び出す必要があります。

    XmlConfigurator.Configure();
于 2011-03-04T08:44:59.933 に答える