logs\log-file.txt
Wo genau wird dieser Ordner erstellt, wenn ich den Dateiwert auf setze ? Im /bin
Verzeichnis?
Meine web.config sieht folgendermaßen 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 die richtige Art zu protokollieren:
ILog logger = LogManager.GetLogger(typeof(CCController));
logger.Error("Some Page", ex); // where ex is the exception instance
c#
asp.net-mvc
logging
log4net
Blankman
quelle
quelle
Die Datei wird im Stammverzeichnis Ihres Projekts / Ihrer Lösung erstellt.
Sie können in der web.config Ihrer App einen Speicherort Ihrer Wahl wie folgt angeben:
<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>
Das Datei-Tag gibt den Speicherort an.
quelle
Der Dateiwert kann entweder ein absoluter Pfad wie "c: \ logs \ log.txt" oder ein relativer Pfad sein, von dem ich glaube, dass er relativ zum bin-Verzeichnis ist.
Bei der Implementierung setze ich normalerweise Folgendes an die Spitze jeder Klasse, in die ich mich einloggen möchte:
private static readonly ILog Log = LogManager.GetLogger( MethodBase.GetCurrentMethod().DeclaringType);
Schließlich können Sie es so verwenden:
Log.Debug("This is a DEBUG level message.");
quelle
Log4net speichert in Ihrem Projektordner. So etwas wie :
\SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt
.Wo:
Hoffe das hilft!
quelle
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");
quelle
yourlogger.Logger.Repository
. So können Sie Folgendes machen :yourlogger.Info($"Logfile opened: {m_Logger.Logger.Repository.GetAppenders().OfType<FileAppender>().FirstOrDefault()?.File}");
. Beachten Sie, dass es nicht kaputt geht, wenn etwas istnull
.Gehen Sie für den Protokollordner und die Datei mit @ Bens Antwort .
Ich werde jedoch den Teil zum Erstellen des Protokolls kommentieren. Imo gibt es keinen richtigen Weg. Wenn ich Logger manuell codiere, mache ich es so, wie Sie es machen:
ILog logger = LogManager.GetLogger(typeof(CCController));
weil es kurz und prägnant ist.
Trotzdem erstelle ich heutzutage keine Logger-Instanzen innerhalb der Klassen , sondern lasse sie von meinem IoC-Container injizieren .
quelle
Ich denke, Ihr Beispiel wird in Ihren Projektordnern gespeichert. Wenn der Standardbenutzer iis oder .NET keine Erstellungsberechtigung hat, kann er den Protokollordner nicht erstellen.
Ich würde zuerst den Protokollordner erstellen und dem Benutzer die volle Berechtigung erteilen und prüfen, ob die Protokolldatei erstellt wird.
quelle
Wenn Sie den Pfad zur Protokolldatei dynamisch auswählen möchten, verwenden Sie die in diesem Link beschriebene Methode : Methode zur dynamischen Auswahl des Protokolldateipfads .
Wenn Sie möchten, können Sie den Pfad zu dem Ort festlegen, an dem Ihre App-EXE-Datei vorhanden ist.
var logFileLocation = System.IO.Path.GetDirectoryName (System.Reflection.Assembly.GetEntryAssembly().Location);
und senden Sie diese 'logFileLocation' dann an die im obigen Link geschriebene Methode wie folgt:
und du bist bereit zu gehen! :) :)
quelle
Ich habe für .NET Core 2.1 mit log4net 2.0.8 entwickelt und festgestellt, dass NealWalters-Code über 0 Argumente für XmlConfigurator.Configure () stöhnt. Ich habe hier eine Lösung von Matt Watson gefunden
log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly()); XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
quelle