2016-03-31 11 views
2

私はLog4Netの使用をラップしている単一の静的クラスを含む別のクラスライブラリを持っています。 このようなものです(下記参照)。Log4netが正しく設定をロードしていない

public static class Logger 
    { 
     private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

     static Logger() 
     { 

      log4net.Config.XmlConfigurator.Configure(); 
      log = log4net.LogManager.GetLogger(typeof(Logger)); 
      log.Logger.IsEnabledFor(log4net.Core.Level.All); 
     } 

     public static void Error(object msg) 
     { 
      log.Error(msg); 
     } 

     public static void Error(object msg, Exception ex) 
     { 
      log.Error(msg, ex); 
     } 
} 

ログに記録するのに問題があります。私は、コードにステップするとき、私はそのようなConfigurationMessageなどのオブジェクトのいくつかのメッセージを参照してください。

{log4netの:ERRORのXmlConfiguratorを:アプリケーションの.configファイルで構成セクション 「log4netの」が見つかりませんでした。あなたの.configファイル と要素について調べてください。設定 セクションでは、次のようになります。このクラスのために}

assemblyinfo.csを、IVEは、これが

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 

ので、どうやら、それはこのファイルを見つけるカント追加しましたか?アセンブリはASP.Net MVC Webアプリケーションから使用されており、コンパイル時にはlog4net.configが/ binフォルダにコピーされるので、そこにはありますが見つかりませんか?

+3

を、それがルートディレクトリではなくbinに見えます。 – dbugger

答えて

1

特にアセンブリ属性がプライマリアセンブリにない場合、アセンブリ属性の設定はWebアプリケーションでうまく動作しません。

代わりに、ファイル自体への参照を要するXmlConfigurator.Configureのオーバーロードを使用します。Webアプリケーションでは

// or wherever your file is 
var fileInfo = new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"); 
if (fileInfo.Exists) 
    log4net.Config.XmlConfigurator.Configure(fileInfo); 
else 
    throw new InvalidOperationException("No log config file found"); 
関連する問題