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?

7voto

Echilon Punkte 9779

Dies sind die Schritte, mit denen meine Dateiprotokollierung schließlich funktionierte:

  • -Check AssemblyInfo.cs enthält die folgenden [Assembly: log4net.Config.XmlConfigurator] . Dadurch wird log4net geladen.
  • Prüfen Sie, ob das Protokollverzeichnis Schreibrechte hat.
  • Prüfen Sie, ob der Logger ein bestimmtes Format hat. Dies geschieht, indem Sie überprüfen, ob jedes Element in Ihrer Konfiguration ein Layout Element angegeben. Beispiel:

<appender name="MainLogger"... <layout type="log4net.Layout.SimpleLayout"/>

  • Versuchen Sie schließlich, die interne log4net-Protokollierung zu aktivieren, um die Konsolenprotokollierung zu aktivieren und die Konsole zu überprüfen. Fügen Sie dazu <add key="log4net.Internal.Debug" value="true"/> zu Ihrem appSettings .

6voto

John K Punkte 27878

Ich habe die Erfahrung gemacht, dass Protokollierungssysteme stillschweigend scheitern, ohne Ausnahmen auszulösen. Ich nehme an, das macht Sinn, denn wenn der Logger Fehler protokolliert, wie kann er dann einen Fehler protokollieren, dass er nicht in der Lage ist, die Protokollierung durchzuführen?

Wenn die Datei also nicht auf der Festplatte erstellt wurde, beginnen Sie mit Überprüfung der Dateisystemberechtigungen um sicherzustellen, dass der Benutzer, unter dem Ihre Anwendung läuft, eine neue Datei an diesem Speicherort schreiben kann.

Zu Testzwecken können Sie die Datei, in die geschrieben werden soll, manuell auf der Festplatte erstellen und die Schreibrechte für alle freigeben. Wenn der Logger anfängt, in diese Datei zu schreiben, wissen Sie, dass es an der Berechtigung und nicht an der Konfiguration liegt.

4voto

Võ Quang Hòa Punkte 2302

Auf meiner Seite habe ich vergessen, die Konfigurationsdatei zu markieren, die kopiert werden soll, während die App kompiliert wird.

Copy the config file to output directory

Klicken Sie einfach mit der rechten Maustaste auf die Datei log4net.config, wählen Sie Eigenschaften und dann Copy to Output Directory to be Copy XXXX

2voto

Petro Slyvko Punkte 121

Leider hat nichts von alledem geholfen. Eine explizite Konfiguration in der Klasse, die zusätzlich zu den bisherigen Einstellungsvorschlägen protokolliert werden soll, brachte bei mir den Erfolg.

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
log4net.Config.XmlConfigurator.Configure(new FileInfo(assemblyFolder + "/log4net.config"));

2voto

Th3NetForc3 Punkte 41

In der Angenommenen Antwort lautete die Lösung also

[assembly: log4net.Config.XmlConfigurator]

in die AssemblyInfo.cs Datei.

Außerdem gab es einen Kommentar, in dem vorgeschlagen wurde

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

Wenn es jedoch immer noch nicht funktioniert, sollten Sie den Namen Ihrer log4net-Konfigurationsdatei ( log4net.config in meinem Fall):

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

Danach funktionierte die Protokollierung einwandfrei.

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