2016-03-31 11 views
2

Ich habe eine separate Klassenbibliothek, die eine einzelne statische Klasse enthält, wo ich die Verwendung von Log4Net einwickle. So etwas (siehe unten).Log4net lädt die Konfiguration nicht richtig

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); 
     } 
} 

Ich habe Probleme, etwas zu protokollieren. Wenn ich in den Code Schritt, sehe ich Nachrichten auf einige der Objekte, wie das ConfigurationMessage:

{log4net: ERROR XmlConfigurator: Fehler beim Konfigurationsabschnitt ‚log4net‘ in der .config-Datei der Anwendung zu finden. Überprüfen Sie Ihre .config-Datei für die Elemente und. Die Konfiguration Abschnitt sollte wie folgt aussehen:}

der AssemblyInfo.cs-für diese Klasse, ive hat dieses

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

Also, es scheint, kann es nicht diese Datei finden? Die Assembly wird von einer ASP.Net MVC-Webanwendung verwendet. Wenn sie kompiliert wird, wird die log4net.config-Datei in den Ordner/bin kopiert, also ist sie dort, aber kann sie nicht gefunden werden?

+3

In einem Web-App, sieht es in dem Root-Verzeichnis, nicht das ist. – dbugger

Antwort

1

Die Konfiguration von Baugruppenattributen funktioniert nicht gut mit Webanwendungen, insbesondere wenn das Baugruppenattribut nicht in der primären Baugruppe enthalten ist.

Statt die Überlastung von XmlConfigurator.Configure verwenden, die einen Verweis auf die Datei selbst nimmt:

// 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"); 
Verwandte Themen