2012-04-18 10 views
52

Ich habe diesen Code und die Config-Datei unter:Konfigurieren Log4Net in Web-Anwendung

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

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

Irgendeine Idee?

Danke,

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> 
+2

Ist die Web-Anwendung Berechtigungen mit Ihrem LogManager.GetLogger ("name") entsprechen müssen Verzeichnis erstellen und einreichen? – Xharze

+1

Es ist auf meinem dev machine> volle Erlaubnis –

+0

https://dzone.com/articles/using-log4net-web-applications – SunilA

Antwort

101

Sie benötigen die Configure Funktion des XmlConfigurator

log4net.Config.XmlConfigurator.Configure(); 

rufen entweder vor dem ersten loggin Anruf anrufen oder in Ihrem Global.asax wie folgt aus:

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

OK, das ist Arbeit :) Jetzt muss ich die Datei konfigurieren, um im Log zu sehen, was ich will –

+2

Wenn Wenn Sie ein Webprojekt verwenden, müssen Sie möglicherweise ein neues Element erstellen und die Datei Global.asax hinzufügen, da sie standardmäßig nicht vorhanden ist. Sie sollten sich auch sofort einloggen. log4net.Config.XmlConfigurator.Configure(); log4net.ILog log = log4net.LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod(). Deklarationstyp); log.Debug ("Setup in Application_Start."); – ggb667

2

oft ist dies auf fehlende Berechtigungen fällig. Das Windows-Konto, mit dem der lokale IIS-Anwendungspool ausgeführt wird, verfügt möglicherweise nicht über die Berechtigung zum Schreiben in das Anwendungsverzeichnis. Sie könnten irgendwo ein Verzeichnis erstellen, jedem die Berechtigung geben, darin zu schreiben und Ihre log4net-Konfiguration auf dieses Verzeichnis zu richten. Wenn dort eine Protokolldatei erstellt wird, können Sie die Berechtigungen für das gewünschte Protokollverzeichnis ändern, damit der App-Pool darauf zugreifen kann.

Ein anderer Grund könnte ein nicht initialisiertes log4net sein. In einer Winforms-App konfigurieren Sie log4net normalerweise beim Start der Anwendung. In einer Web-App können Sie dies entweder dynamisch tun (in Ihrer Logging-Komponente prüfen Sie, ob Sie einen bestimmten Log-Logger mit seinem Namen erstellen können, wenn nicht -> configure() aufrufen) oder beim Anwendungsstart in global.asax.cs .

6

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

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

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

3: Stellen Sie sicher, dass Sie sehr früh in Ihrem Programm anmelden. Ansonsten wird es in einigen Szenarien nicht richtig initialisiert (lesen Sie mehr unter log4net FAQ).

So melden Sie sich etwas beim Anwendungsstart in der Global.asax

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 über die Berechtigung von Dateien und Ordnern auf dem angegebenen Pfad zu erstellen (wenn der Ordner selbst auch nicht existiert)

5: der Rest Ihrer gegebenen Informationen sieht ok

+3

Haben Sie Quellen, die Punkt 3 unterstützen? – Default

+3

@Default Siehe "Wann sollte ich meine erste Nachricht schreiben" in [FAQ] (https://logging.apache.org/log4net/release/faq.html) –

19

Ein anderer Weg, dies zu tun wäre, um diese Linie zu der Montage Informationen der Web-Anwendung hinzuzufügen:

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

Ähnlich wie bei Shriek.

+0

Dies funktioniert nur in "normalen" Anwendungen, aber nicht mit eine Webanwendung. – shriek

+1

@shriek: Ich bin mir nicht sicher, dass Sie Recht haben. Dieses Attribut wird verwendet, um den XmlConfigurator zu konfigurieren, ohne eine der Configure-Methoden aufzurufen. Es ist richtig, dass "Watch = True" nicht viel Wert hat, da eine Änderung in der web.config immer einen Neustart der Webanwendung verursacht – hwcverwe

+1

@hwcverwe: Ich hatte gerade dieses Problem gestern, das Attribut war da, aber die Logger hat nichts gemacht. Erst nachdem die 'Configure' Methode vor dem ersten Aufruf des Loggers aufgerufen wurde, funktionierte es. (Dies war für einen WCF-Dienst) – shriek

0

Ich hatte auch das ähnliche Problem. Protokolle wurden nicht erstellt.

Bitte überprüfen Logger attribute name sollte

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



private static readonly ILog Log = LogManager.GetLogger("Mylog"); 
Verwandte Themen