2010-01-07 3 views
5

Ich benutze log4net und habe es komplett mit param name = "File" value = "C: \ Application.log" eingerichtet. Die Datei wird jedoch nicht in C: erstellt. Ich verwende Windows 7 und vielleicht etwas wie Berechtigungen verhindert die Erstellung der Datei. HierProtokolldatei nicht erstellt?

ist die app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" /> 
    </configSections>` 

    <log4net> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    <appender name="LogFileAppender“ type=“log4net.Appender.RollingFileAppender" > 
     <param name="File" value="C:\Users\Mohit\Documents\Application.log" /> 
     <param name="AppendToFile" value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern“ value=“%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" /> 
     </layout> 
    </appender> 
    </log4net> 
</configuration> 

Antwort

7

Sie müssen einen echten Dateinamen angeben. Was Sie in Ihrer Konfiguration definiert haben, ist ein Ordnername. Statt:

<param name="File" value="C:\Users\Mohit\Documents" /> 

Verwendung so etwas wie:

<param name="File" value="C:\Users\Mohit\Documents\log.txt" /> 

Auch müssen Sie wahrscheinlich erhöhten Berechtigungen für Ihre Anwendung das Protokoll an die Wurzel c zu schreiben: Ordner. UAC lässt Sie nicht in den Stammordner schreiben.

Wie Andy sagte, werden Sie besser sein, einige Unterordner von Windows-Benutzer wählen Ordner wie:

c:\Users\Mohit\AppData\Local\<MyApplication> 

log4net einige vordefinierte Variablen hat man spezielle Ordner Ziel verwenden können. Es gibt einige Fragen über das hier SO:

How to specify common application data folder for log4net?

C# how to specify the appData file path in the app.config file

1

Ja, stellen Sie sicher, dass der Benutzer, der die Anwendung ausführt, Schreibzugriff auf c hat :.

Besser noch, wahrscheinlich möchten Sie nicht Ihre Anwendungsprotokoll in das Stammverzeichnis c: \ zu schreiben. Es wäre wahrscheinlich besser, einen Ort zu wählen, an dem Ihre App installiert ist, oder irgendwo unter Dokumente und Einstellungen (oder das Windows 7-Äquivalent).

+0

Stellen Sie außerdem sicher, dass der Appender auf dem Logger angegeben ist. Es ist leicht zu übersehen.Wenn Sie die Anwendung im Debug-Modus unter VS ausführen, können Sie einen Trace-Appender verwenden und die Logging-Ausgabe wird im Ausgabefenster angezeigt, sehr nützlich, wenn Log4Net selbst etwas sagt. – Skurmedel

1

Mein Problem war die Reihenfolge der Abschnitte in meiner Datei App.config. Ich hatte zuerst meine <startup> Sektion, dann meine <configSections>. Aus irgendeinem Grund habe ich in meiner Windows-App keinen Fehler erhalten, aber in einer Konsolen-App ist ein Fehler aufgetreten. Offenbar <configSections> muss der erste Abschnitt unter <configuration> sein

Anstatt also diese:

<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

tun:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
0

Was mein Problem gelöst war im Grunde what CTBrewski posted here (+1 btw!), aber mein App.config hatte ein appSettings-Eintrag und kein configSections-Eintrag.

zog ich den appSettings Eintrag mit meinem log4net Config-Einträge über dem Starteintrag, und die Protokolle wurden dann in das Benutzerprofil geschrieben:

<configuration> 
    <appSettings> 
    <add key="log4net.Config" value="log4net.config" /> 
    <add key="log4net.Config.Watch" value="True" /> 
    <add key="ClientSettingsProvider.ServiceUri" value="" /> 
    </appSettings> 
    <startup> 
    <supportedRuntime version="v2.0.50727" /> 
    </startup> 
    ... 
    ... 

Und dann so natürlich meine appender aussieht:

<appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="${LOCALAPPDATA}/Synclio/Logs/SynclioWin.log" /> 
    <appendToFile value="true" /> 
    <maximumFileSize value="5000KB" /> 
    <maxSizeRollBackups value="2" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%level %thread %logger - %message%newline" /> 
    </layout> 
    </appender> 
+0

Nice edit @Philipp, ich muss daran denken, die Sprache Helfer zu verwenden, wie ich Syntaxfärbung liebe. – jmort253