webentwicklung-frage-antwort-db.com.de

Konfigurieren Sie Log4Net in der Webanwendung

Ich habe diesen Code und die Konfigurationsdatei unten:

ILog log = LogManager.GetLogger(typeof(MyClass));
log.Debug("Testing");

TestProj Verzeichnis wird nicht erstellt und wenn ich es erstelle, keine TestLog.txt Datei, kein Protokoll ... nichts.

Irgendeine Idee?

Vielen Dank,

Die Konfigurationsdatei

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

<log4net debug="true">
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file value="C:\\TestProj\\TestLog.txt" />
  <appendToFile value="true" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
  </layout>
</appender>

<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
60
Kris-I

Sie müssen die Configure-Funktion der XmlConfigurator aufrufen.

log4net.Config.XmlConfigurator.Configure();

Rufen Sie entweder vor Ihrem ersten Loggin-Anruf oder in Ihrem Global.asax folgendermaßen auf:

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure();
}
115
shriek

Eine andere Möglichkeit wäre, diese Zeile in die Assembly-Informationen der Webanwendung einzufügen:

// Configure log4net using the .config file
[Assembly: log4net.Config.XmlConfigurator(Watch = true)]

Ähnlich wie bei Shriek.

22
keni

1: Fügen Sie der AssemblyInfo-Klasse die folgende Zeile hinzu

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

2: Stellen Sie sicher, dass Sie .Net Framework 4 Client Profile nicht als Target Framework verwenden (ich denke, das ist auf Ihrer Seite in Ordnung, da es sonst nicht kompilieren würde).

3: Stellen Sie sicher, dass Sie sich sehr früh in Ihrem Programm anmelden. Andernfalls wird sie in einigen Szenarien nicht ordnungsgemäß initialisiert (mehr dazu unter log4net FAQ ).

Also beim Start der Anwendung etwas in der Global.asax protokollieren

public class Global : System.Web.HttpApplication
{
    private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(Global));
    protected void Application_Start(object sender, EventArgs e)
    {
        Log.Info("Startup application.");
    }
}

4: Stellen Sie sicher, dass Sie die Berechtigung haben, Dateien und Ordner für den angegebenen Pfad zu erstellen (falls der Ordner selbst nicht vorhanden ist).

5: Der Rest Ihrer Angaben sieht in Ordnung aus

9
hwcverwe

dies ist häufig auf fehlende Berechtigungen zurückzuführen. Das Windows-Konto, mit dem der Anwendungspool IIS ausgeführt wird, verfügt möglicherweise nicht über die Berechtigung zum Schreiben in das Anwendungsverzeichnis. Sie könnten ein Verzeichnis irgendwo erstellen, jedem die Berechtigung zum Schreiben geben und Ihre log4net-Konfiguration auf dieses Verzeichnis verweisen. Wenn dort eine Protokolldatei erstellt wird, können Sie die Berechtigungen für das gewünschte Protokollverzeichnis ändern, sodass der Anwendungspool in das Protokoll schreiben kann.

Ein weiterer Grund könnte ein nicht initialisiertes log4net sein. In einer Winforms-App konfigurieren Sie normalerweise log4net beim Start der Anwendung. In einer Web-App können Sie dies entweder dynamisch tun (überprüfen Sie in Ihrer Protokollierungskomponente, ob Sie einen bestimmten Ilog-Logger mit seinem Namen erstellen können, falls nicht -> call configure ()) oder erneut beim Anwendungsstart in global.asax.cs .

2
Dirk Trilsbeek

Ich hatte auch ein ähnliches Problem. Protokolle wurden nicht erstellt. 

Überprüfen Sie, ob der Name des Protokollierungsattributs mit Ihrem LogManager.GetLogger ("Name") übereinstimmen sollte.

<logger name="Mylog">
      <level value="All"></level>
      <appender-ref ref="RollingLogFileAppender" />
    </logger>



private static readonly ILog Log = LogManager.GetLogger("Mylog");
0
Shakeer Hussain