2010-05-12 14 views
56

Wenn ich den Wert der Datei auf logs\log-file.txt, wo genau wird es diesen Ordner erstellen? Im Verzeichnis /bin?Wo erstellt log4net diese Protokolldatei?

Meine web.config sieht wie folgt aus:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender"> 
     <file value="logs\log-file.txt" /> 
     <appendToFile value="true" /> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
     </layout> 
    </appender> 
</log4net> 

Ist dies der richtige Weg zu protokollieren:

ILog logger = LogManager.GetLogger(typeof(CCController)); 
logger.Error("Some Page", ex); // where ex is the exception instance 
+0

Können Sie bitte eine der Antworten als richtig akzeptieren? Danke –

Antwort

18

Der Dateiwert kann entweder ein absoluter Pfad wie „c: \ logs \ log.txt "oder ein relativer Pfad, von dem ich glaube, dass er relativ zum bin-Verzeichnis ist.

Soweit es die Umsetzung, ich an der Spitze jeder Klasse die folgende Regel stelle ich planen, melden Sie sich an:

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType); 

Schließlich können Sie es wie so verwenden:

Log.Debug("This is a DEBUG level message."); 
+1

hmm..es scheint die Protokolldatei nirgendwo zu erstellen, und ich bekomme keinen Fehler? – Blankman

+2

Klingt nach einem Berechtigungsproblem. Ich würde die Konfiguration auf einen absoluten Pfad außerhalb Ihres Web-Verzeichnisses abbilden. Stellen Sie danach sicher, dass die Protokolldatei und der Ordner über Berechtigungen verfügen, die dem asp.net-Arbeitsprozess den ordnungsgemäßen Zugriff ermöglichen. –

+0

Für einen relativen Pfad mag ich die Protokolldatei auf Projektebene:

0

Ich denke, Ihr Beispiel wird in Ihren Projektordnern gespeichert, und wenn der Standardbenutzer iis oder .NET keine Berechtigung zum Erstellen hat, kann der Protokollordner nicht erstellt werden.

Ich würde zuerst den Ordner logs erstellen und dem iis user volle Berechtigung gewähren und sehen, ob die Protokolldatei erstellt wird.

4

Für den Protokollordner und Datei Zeug, gehen Sie mit @Bens answer.

Ich werde jedoch die Erstellung Protokoll Teil kommentieren. Imo gibt es keine richtig Weg. Wenn ich Logger manuell codiere, mache ich das so, wie du es machst:

weil es kurz und prägnant ist.

Das heißt, ich erstellen nicht die Logger-Instanzen in den Klassen in diesen Tagen, I let my IoC container inject it for me.

9

Log4net speichert in Ihrem Projektordner. Etwas wie: \SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt.

Wo:

  • SolutionFolder ist, wo Sie Ihre Lösung
  • ProjectFolder speichern ist der Ordner, in dem Ihr Projekt lebt in die Lösung und
  • SolutionConfiguration ist der Ordner, der alle Binärdateien Ihres Projekts contais (der Standard ist Debug oder Release)

Hoffe, das hilft!

42

Wenn Sie Ihre Log-Datei mögen Ort an einem bestimmten Ort sein, die zur Laufzeit entschieden werden kann Ihr Projekt Ausgabeverzeichnis sein, dann können Sie Ihnen .config Dateieintrag in dieser

Weise konfigurieren
<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" /> 

und dann im Code vor log4net configure, stellen sie den neuen Pfad wie unten

log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path 
log4net.Config.XmlConfigurator.Configure(); 

Wie einfach ist es nennen? :)

+1

Großer Trick, hilft es, die gesamte Konfiguration an einem Ort zu setzen :) –

32

Es wird die Datei im Stammverzeichnis Ihres Projekts/Lösung erstellen.

Sie können einen Ort der Wahl in der web.config Ihrer App wie folgt an:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="c:/ServiceLogs/Olympus.Core.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <datePattern value=".yyyyMMdd.log" /> 
     <maximumFileSize value="5MB" /> 
     <staticLogFileName value="true" /> 
     <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" /> 
     <maxSizeRollBackups value="-1" /> 
     <countDirection value="1" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception" /> 
     </layout> 
    </appender> 

die Datei-Tag den Ort angibt.

+7

+1 die einzige Antwort, die direkt die Frage beantwortet " Wo erstellt log4net diese Protokolldatei? " – Keith

+0

Hallo Oladipo, für mich ohne Pfaddefinitionsprotokoll wird in bin-Ordner erstellt. – Pompair

2
FileAppender appender = repository.GetAppenders().OfType<FileAppender>().FirstOrDefault(); 
if (appender != null) 
    logger.DebugFormat("log file located at : {0}", appender.File); 
else 
    logger.Error("Could not locate fileAppender"); 
Verwandte Themen