log4netのlog4net.configが読み込まれずに原因を追究していたのですが、以下の記事で解らない点があるので質問します。
http://d.hatena.ne.jp/tutinoko16/20070615/1181897663
この設定はloggerインスタンスを生成する責務を持つアセンブリのAssemblyInfo.csに記述されてないとログ出力されない。
これがよく解りません。
例えばHogehogeApp.Serviceというプロジェクトの単体テストのため、HogehogeApp.Service.Testというプロジェクトを作成したとします。
このプロジェクトで以下のソースを書きました。
C#
1namespace HogehogeApp.Service.Test.Main 2{ 3 /// <summary> 4 /// クラスの説明 5 /// </summary> 6 [TestClass] 7 public class LogTest 8 { 9 /// <summary> 10 /// ロガー 11 /// </summary> 12 static readonly ILog Logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 13 [TestMethod] 14 public void 何かのテスト() 15 { 16 ///AssemblyInfo.csの設定値を確認する 17 System.Diagnostics.FileVersionInfo ver = 18 System.Diagnostics.FileVersionInfo.GetVersionInfo( 19 System.Reflection.Assembly.GetExecutingAssembly().Location); 20 ///ログの設定を読み込めているか確認する。結果はfalse 21 Logger.Debug(Logger.Logger.Repository.Configured); 22 //期待通りにログが出力されない。 23 Logger.Debug("abcdefg"); 24 } 25 } 26}
このソースではログが正常に出力されませんでした。
AssemblyInfo.csを確認しました。
念のため、一旦空にしてから、プロパティ画面からバージョン情報を追加するなどして、AssemblyInfo.csを作り直し、以下のようにlog4net.configの読み込みを追加しました。
C#
1using System.Reflection; 2 3[assembly: AssemblyTitle("HogehogeApp.Service.Test")] 4[assembly: AssemblyProduct("HogehogeApp.Service.Test")] 5[assembly: AssemblyVersion("2")] 6[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = false)]
この状態で再度実行したのですが、log4net.configの設定は読み込まれていません。
不思議なのは、AssemblyInfo.csの値を取得したら、バージョン情報などが読み込まれているのです。なのでAssemblyInfo.cs自体は読みに行っていると思います。
手動でlog4net.configを読めないかと思って、以下のようにソース上で読み込んだところ、正常に読み込めました。
C#
1XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
つまりlog4net.configも問題ない事になります。
なぜか、AssemblyInfo.csに書いてある「[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = false)]」だけが無視されているようです。
どうすれば AssemblyInfo.csからlog4net.configを読み込めるのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。