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