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?

315voto

Kirk Woll Punkte 72923

Ein Problem bei dieser Art von Dingen ist, dass man sicherstellen muss, dass die XmlConfigurator Attribut an die Baugruppe an, indem Sie die folgende Zeile in Ihre AssemblyInfo.cs :

[assembly: log4net.Config.XmlConfigurator]

Andernfalls wird log4net nie aktiviert.

51voto

Rob Levine Punkte 38688

Ich vermute, dass entweder log4net überhaupt nicht protokolliert, oder die Datei nicht dort landet, wo Sie sie erwarten.

Erstens, haben Sie tatsächlich angerufen

XmlConfigurator.Configure()

irgendwo in Ihrem Code? Wenn sich der obige XML-Schnipsel in der Konfigurationsdatei der Anwendung befindet, ist dieser Aufruf ausreichend. Befindet sich das Xml-Snippet in einer eigenen Datei, müssen Sie die .Configure(string) Überladung, die den Pfad zur Datei übernimmt. Ohne diesen Aufruf (oder offenbar das von Kirk Woll erwähnte Attribut auf Baugruppenebene) wird log4net überhaupt nicht protokollieren.

Wenn Sie glauben, dass alles erledigt ist und log4net protokollieren sollte, dann sollten Sie vielleicht einen voll qualifizierten Pfad für die Protokolldatei angeben, während Sie weiter debuggen. So können Sie sicher sein, wo die Datei sollte sein.

35voto

Amir Abiri Punkte 7823

Es gibt noch ein weiteres kleines Problem, siehe hier: http://logging.apache.org/log4net/release/manual/configuration.html#dot-config

el [assembly: log4net.Config.XmlConfigurator] Methode funktioniert nicht mit app.config. Wenn Sie log4net über app.config konfigurieren, müssen Sie die log4net.Config.XmlConfigurator.Configure() Methode.

23voto

earthling42 Punkte 866

Hier ist meine Checkliste für den Fall, dass sich log4net als widerspenstig erweist:

  • sicherstellen, dass die Datei log4net.config beim Erstellen in den Ordner bin\ kopiert wird (im Compiler auf 'Copy if newer' setzen)
    • wenn Sie mit installiertem Code arbeiten, stellen Sie sicher, dass die log4net.config mit dabei ist (im Compiler auf 'Content' gesetzt)
  • sicherstellen, dass der Benutzer, unter dem der Prozess läuft, Schreibrechte für den Ordner hat, in den die Protokolle geschrieben werden sollen
  • im Zweifelsfall die Promiskuiterlaubnis für c erteilen: \temp\ und lassen Sie alles dort protokollieren ()
  • Starten Sie Sysinternal/Dbgview.exe, um zu sehen, ob es Ihnen etwas sagt

9voto

Oladipo Olasemo Punkte 1970

Für ein ASP.NET MVC-Projekt wird

log4net.Config.XmlConfigurator.Configure();

in der Global.asax.cs hilft ebenfalls:

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);
        AuthConfig.RegisterAuth();

        log4net.Config.XmlConfigurator.Configure();
    }
}

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