2010-04-15 9 views
5

Ich versuche log4net einzurichten, aber ich kann es nicht funktioniert Ich habe in meinem Web.config setzen:Ich kann nicht log4net Arbeit in meiner Web-Anwendung machen :(

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
</configSections> 

<log4net> 
    <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    </appender> 

    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logfile.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Composite" /> 
    <maxSizeRollBackups value="14" /> 
    <maximumFileSize value="15000KB" /> 
    <datePattern value="yyyyMMdd" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
    </root> 
</log4net> 

Dann in ich meinen Code ausführen:..

log4net.Config.XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/Web.config"))); 
ILog log = LogManager.GetLogger("MainLogger"); 

if (log.IsDebugEnabled) 
    log.Debug("lalala"); 

Aber es passiert nichts ich habe die „log“ Variable, und es enthält eine LogImpl Objekt, das alle Protokollebenen aktiviert hat ich keine Fehler oder Konfigurationswarnung erhalten, kann ich nicht sehen, jede Datei im Stammverzeichnis, im Papierkorb oder an anderer Stelle

Was muss ich tun, damit es funktioniert?

+1

Wenn Sie dies in Visual Studio debuggen können, überprüfen Sie das Ausgabefenster, wenn Sie Ihre App Brände. log4net gibt dort Informationen über Konfigurationsfehler aus. –

+0

Haben Sie versucht, einen absoluten Pfad für die Eigenschaft 'file' zu ​​setzen? (z. B. 'C: \ logfile.log') –

+1

Zusätzlich zu den untenstehenden ausgezeichneten Antworten sollten Sie Configure nur einmal für die gesamte Lebensdauer des App-Prozesses anrufen, z. in Anwendungsstart in Global.asax. –

Antwort

4

Haben Sie diese Zeile in Ihrer Datei AssemblyInfo.cs?

Sie sollten auch den Ansatz "typeof (YourClass)" von Eric in seiner Antwort unten betrachten. Das erste Mal, dass ich eine alternative Antwort auf eine von mir upvoltiert habe. :)

Sie haben keinen TraceAppender definiert.

Sie haben noch einen Logger namens "MainLogger" konfiguriert

<logger name="MainLogger"> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingFileAppender" /> 
    <appender-ref ref="TraceAppender" /> 
</logger> 

auch, einen Blick here

+1

Aber er hat eine definiert, die eine catch-all/default ist. –

+0

Messepunkt. Ich habe die Angewohnheit, ganz spezifisch zu sein.Meine Antwort ist falsch und ich werde es aktualisieren, sobald ich die richtige Antwort finde –

+0

Hinzufügen, dass ich die Zeilen dupliziert, aber wenn ich die Wurzel entfernen, dann funktioniert es gut! : P Danke! – vtortola

9

Versuchen zu schreiben:

log4net.Config.XmlConfigurator.Configure(); 

statt, da Web.config die Standardposition ist, wo Log4Net aussehen wird.

Andernfalls, die ganze Zeile aus dem Code entfernen und die folgenden in Ihrem AssemblyInfo.cs einfügen:

[assembly: log4net.Config.XmlConfigurator()] 

Dies wird konfigurieren Log4Net auf Baugruppenebene. Dann in Ihrem Code, nur einen Logger wie folgt erstellen:

private static readonly ILog Log = LogManager.GetLogger(typeof(YourFunkyClass)); 
+1

+1 Ich benutze oft diese Syntax –

0

Hier ist meine Arbeitslösung:

Configuration oConfiguration = WebConfigurationManager.OpenWebConfiguration(oRequest.ApplicationPath); 

log4net.Config.XmlConfigurator.Configure(new FileInfo(oConfiguration.FilePath)); 
Verwandte Themen