Frage

Ich habe einige Probleme log4net bekommen von ASP.NET 3.5 zu arbeiten. Dies ist das erste Mal, dass ich versucht habe log4net zu verwenden, ich fühle mich wie ich ein Stück des Puzzles fehlt bin.

Mein Projekt verweist auf die log4net Montag, und soweit ich das beurteilen kann, ist es erfolgreich auf meinem Server bereitgestellt wird.

Meine web.config enthält folgende Möglichkeiten:

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

  <log4net>
    <appender name="InfoAppender" type="log4net.Appender.FileAppender">
      <file value="..\..\logs\\InfoLog.html" />
      <appendToFile value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
          value="%d [%t] %-5p %c [%x] - %m%n" />
      </layout>
    </appender>
    <logger name="_Default">
      <level value="INFO" />
      <appender-ref ref="InfoAppender" />
    </logger>
  </log4net>

Ich verwende den folgenden Code die Logger zu testen:

using log4net;
using log4net.Config;

public partial class _Default : System.Web.UI.Page
{
    private static readonly ILog log = LogManager.GetLogger("_Default");

    protected void Page_Load(object sender, EventArgs e)
    {
        log.Info("Hello logging world!");
    }
}

In meinem Global.asax, ich tue das folgende:

void Application_Start(object sender, EventArgs e) 
{
    log4net.Config.XmlConfigurator.Configure();
}

An diesem Punkt kann ich nicht denken, was sonst könnte ich falsch sein. Das Verzeichnis Ich versuche, das Protokoll zu speichern, in beschreibbar ist, und auch wenn ich verschiedene Verzeichnisse versuchen bekomme ich das gleiche Ergebnis. Keine Datei, keine Protokolle

Irgendwelche Vorschläge? : -)


Edit: Ich habe für den Pfad mehr verschiedene Formate ausprobiert und Namen der Protokolldatei, von denen einige auch „.. \ .. \ InfoLog.html“, ‚InfoLog.html‘, „logs \ InfoLog.html “usw., nur für den Fall, dass jemand fragt, ob das das Problem.


Edit: Ich habe die Root-Logger Knoten zurück in den log4net Abschnitt hinzugefügt, ich weggelassen, dass auf Unfall, wenn sie von den Proben zu kopieren. Der Root-Logger Knoten sieht wie folgt aus:

<root>
  <level value="INFO" />
  <appender-ref ref="InfoAppender" />
</root>

Auch mit ihm, aber ich habe immer noch kein Glück.

War es hilfreich?

Lösung

Der Root-Logger ist obligatorisch, denke ich. Ich vermute, Konfiguration schlägt fehl, weil die Wurzel nicht existiert.

Ein weiteres mögliches Problem ist, dass Configure nicht auf die Web.config hingewiesen werden.

Versuchen Sie Configure (Server.MapPath ( "~ / web.config")) statt.

Andere Tipps

Es klingt sehr ähnlich wie ein Dateiberechtigungen Problem für mich. Wenn Sie einen Dateinamen ohne Pfad angeben, wird log4net in das Stammverzeichnis der Web-Anwendung schreiben. Versuch das. Abgesehen von dort keinen Erfolg, würde ich empfehlen Sie, indem Sie die folgenden in Ihrer web.config internen log4net Debuggen aktivieren:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <appSettings>
        <add key="log4net.Internal.Debug" value="true"/>
    </appSettings>
</configuration>

Dann stellen Sie die App im Debug-Modus kompiliert und ausgeführt, die Visual Studio Remote Debugger alle Fehler zu sehen, die ausgelöst werden.

Iv verbrachte nur 3 Stunden mit dem Versuch, dieses Problem zu beheben, um das Ende es die web.config Formatierung war.

Ich habe das, und es hat nicht funktioniert:

<section name="SubSonicService" type="SubSonic.SubSonicSection, SubSonic" requirePermission="false"/>
      <section name="log4net"
        type="log4net.Config.Log4NetConfigurationSectionHandler
      , log4net"
        requirePermission="false"/>

Ändern sie diese Fest es:

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

Annoying !!

Nur zur Info: der Dateipfad formatiert werden muss, wie folgt:

<file value="..\\..\\logs\\InfoLog.html" />

Eine einfache Konfiguration Tutorial von Codeproject

Ich habe nicht die Global.asx haben in .net laufen 3.5

das ist mein Code ... ich konfigurieren, dass die log4net in einer separaten Datei log4net.config

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

//My Web Services class name
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Service1");

Ich hatte das gleiche (frustrierend) Problem. i bewegt, um die Wurzel zu der Spitze des log4net Config Abschnitt und alles funktioniert. Außerdem hatte ich zu root und einem Logger Element, das in zwei Linien führte jedes Mal, wenn ich an den Logger einen Anruf gemacht. i entfernt das Logger Element und einfach die Wurzel halten und seine Arbeiten groß.

Wie wäre es den Logger mit der Seite des Art zu schaffen, wie folgt aus:

private static readonly ILog log = LogManager.GetLogger(typeof(_Default));

Das ist, was ich in Global.ASX haben. Hat alles in asp.net Arbeits 3.5

<%@ Application Language="C#" %>

<script runat="server">

    void Application_Start(object sender, EventArgs e) 
    {
        // Code that runs on application startup
         log4net.Config.XmlConfigurator.Configure(); 
    }

    void Application_End(object sender, EventArgs e) 
    {
        //  Code that runs on application shutdown
        log4net.LogManager.Shutdown();
    }

    void Application_Error(object sender, EventArgs e) 
    { 
        // Code that runs when an unhandled error occurs
    }

    void Session_Start(object sender, EventArgs e) 
    {
        // Code that runs when a new session is started
    }

    void Session_End(object sender, EventArgs e) 
    {
        // Code that runs when a session ends. 
        // Note: The Session_End event is raised only when the sessionstate mode
        // is set to InProc in the Web.config file. If session mode is set to StateServer 
        // or SQLServer, the event is not raised.
    }
</script>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top