128 Stimmen

log4net funktioniert nicht

Hey ich habe diese Konfiguration in meiner web.config

<log4net>
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
        <param name="File" value="mylog.log" />
        <param name="AppendToFile" value="true" />
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="" />
            <param name="Footer" value="" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
        <layout type="log4net.Layout.PatternLayout">
            <param name="Header" value="[Header]\r\n" />
            <param name="Footer" value="[Footer]\r\n" />
            <param name="ConversionPattern" value="%d [%t] %-5p %m%n" />
        </layout>
    </appender>
    <root>
        <level value="DEBUG" />
        <appender-ref ref="LogFileAppender" />
        <appender-ref ref="ConsoleAppender" />
    </root>
</log4net>

aber log4net funktioniert nicht. Mein Projekt kompiliert gut, und ich bekomme keine Fehler debuggen entweder. Die Zeilen, in denen ich sage zu log.debug("somemessage") wird gut ausgeführt, aber ich kann die mylog.log Datei, also wo ist sie?

1voto

Reyan Chougle Punkte 4269

Ich habe alle oben genannten Maßnahmen ausprobiert, aber nichts hat funktioniert. Hinzufügen dieser Zeile in app.config's configSections Abschnitt hat für mich funktioniert.

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a" />

Sicherstellen, dass Version y PublicKeyToken ist korrekt

0voto

Tomas Voracek Punkte 5801
<param name="File" value="mylog.log" />

sagt: "write mylog.log to actual folder". Das bedeutet, dass wenn Ihre Webapp unter IIS läuft, dann wird das Protokoll in C:\inetpub\wwwroot\appname\mylog.log.

Wenn die Protokolldatei nicht vorhanden ist, dann hat das Konto, unter dem die Anwendung läuft, vielleicht keine Schreibrechte für den Ordner. Sie können Process Monitor von SysInternals ausführen, um zu sehen, ob und wo eine Datei geschrieben wird.

Führen Sie VS auch im Debug-Modus aus, um zu sehen, ob irgendwelche Ausnahmen ausgelöst werden (Debug->Exceptions->CLR Exceptions, check Thrown).

0voto

Marco Punkte 76

In meinem Fall habe ich vergessen, die Eigenschaften der Datei log4Net.config auf "Inhalt" zu setzen, so dass die Datei nicht in die Bereitstellung einbezogen wurde. Achten Sie also darauf:

Compile action : Content

0voto

Jacqui Kay Punkte 11

Stellen Sie sicher, dass die Berichtsebene auf "Debug" oder "ALL" eingestellt ist. Das hat mich erwischt, und ich habe ewig gebraucht, um meine log4net-Einrichtung zu debuggen. Ich hatte es auf "Fehler" eingestellt, und da es keine Fehler gab, wurde auch nichts protokolliert.

0voto

Rik Bradley Punkte 63

Abgesehen von all den anderen Antworten war mein Problem, dass ich einen Aufruf an GetLogger() in meiner Start-up-Klasse (WinForms-Beispiel) benötigte:

static class Program
{
    public static readonly ILog MainLog = LogManager.GetLogger("Main");

    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

Alle meine "sinnvollen" Logging-Anweisungen befanden sich in einer DLL, die offenbar zu spät für log4net geladen wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X