log4net を適切に構成しようとして最悪の時間を過ごしています。まず、私がこれまでどのように使用してきたか (そして成功したか) についての背景を説明する必要があります。
私のアプリケーションには、すべてのデータをログに記録する必要がある FileAppender を定義する log4net 構成ファイルがあります。すべてのアセンブリにはILog
メンバー変数があり、それを に設定しますLogManager.GetLogger( typeof( myclass))
。ここで、myclassはログを記録しているクラスです。
このようにすべてがうまく機能します。
今では、少し違った使い方のアセンブリもあります。複数回インスタンス化することができ、要件は、各インスタンスが独自のファイルにログを記録することです。これをプログラムで機能させることができ、logging.xml ファイルを捨てました。
Hierarchy hierarchy = (Hierarchy)LogManager.GetRepository();
hierarchy.Root.Level = log4net.Core.Level.All;
hierarchy.Configured = true;
string module_path = MyCompany.Shared.Utils.FileSystem.GetModulePath();
string folder = module_path + "\\logs\\";
string path = String.Format("{0}{1}-log.txt", folder, name);
_log = LogManager.GetLogger( name);
var fa = new log4net.Appender.FileAppender() { Name = name, File = path, AppendToFile = true};
var layout = new PatternLayout { ConversionPattern = "%date{{yyyy-MM-dd-HH_mm_ss.fff}} [%thread] %-5level %logger - %message%newline" };
layout.ActivateOptions();
fa.Layout = layout;
fa.ActivateOptions();
((Logger)_log.Logger).AddAppender( fa);
これもうまくいきます。ここで問題が発生します。上記のアセンブリは、log4net も使用する別のアセンブリを使用しています。ただし、そのアセンブリは、使用するために既に構成されているロガーがあることを期待しています。明らかに、プログラムでlog4netを設定している方法が、それが機能しないようにしています。
内部 log4net デバッグを有効にしました。表示されるエラー メッセージはエラーについてかなり明確ですが、問題を (最善の) 解決方法がわかりません。
log4net: Logger: No appenders could be found for logger [test_logger] repository [log4net-default-repository]
log4net: Logger: Please initialize the log4net system properly.
log4net: Logger: Current AppDomain context information:
log4net: Logger: BaseDirectory : C:\Sample\bin\Debug\
log4net: Logger: FriendlyName : SampleTestApp.vshost.exe
log4net: Logger: DynamicDirectory:
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]
LoggerFactory
「test_logger」ロガーを作成するために明示的に使用しても同じエラーが発生するため、ロガーが作成されていると想定しています。したがって、そのロガーのアペンダーを作成する方法を理解するだけの問題です。FileAppender
以前のコードを使用してこのロガー用の を作成しようとしましたが、コードを実行しても同じエラーが発生します。
これを機能させるために誰かが私に何かを提案できますか?
編集 - すべてのログ メッセージを、テスト アプリによって作成された FileAppender に入れることを本当に望んでいることを明確にする必要があります。個別のファイル (アセンブリごとに 1 つ) を持つことは避けたいと思います。