Ich habe mit Log4net ein einfaches Szenario erstellt, aber es scheint, dass meine Appender nicht funktionieren, da die Nachrichten nicht zur Protokolldatei hinzugefügt werden.
Ich habe der Datei web.config Folgendes hinzugefügt:
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/>
</configSections>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="D:\MyData\Desktop\LogFile.txt" />
<appendToFile value="true" />
<encoding value="utf-8" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<level value="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
In der globalen ASAX-Datei habe ich hinzugefügt:
ILog logger = LogManager.GetLogger(typeof(MvcApplication));
und innerhalb der Application_Start-Methode:
logger.Info("Starting the application...");
Was habe ich falsch gemacht?
AssemblyInfo
Datei. Gepostet als Antwort unten.Verwenden Sie diese FAQ-Seite: Apache log4net Häufig gestellte Fragen
Etwa 3/4 des Weges nach unten zeigt Ihnen, wie Sie das log4net-Debugging mithilfe der Anwendungsverfolgung aktivieren. Hier erfahren Sie, wo Ihr Problem liegt.
Die Grundlagen sind:
Und Sie sehen die Ablaufverfolgung in der Standardausgabe
quelle
root
Abschnitt auf den falschen Logger bezog !!Wie @AndreasPaulsson vorgeschlagen hat, müssen wir es konfigurieren. Ich mache die Konfiguration in
AssemblyInfo
Datei. Ich spezifiziere dasconfiguration file name
hier.quelle
Stellen Sie außerdem sicher, dass für [log4net] .config die Option "Immer kopieren" ausgewählt ist
quelle
Stellen Sie sicher, dass der Prozess (Konto), unter dem die Site ausgeführt wird, über Berechtigungen zum Schreiben in das Ausgabeverzeichnis verfügt.
In IIS 7 und höher wird dies im Anwendungspool konfiguriert und ist normalerweise die AppPool-Identität , die normalerweise nicht zum Schreiben in alle Verzeichnisse berechtigt ist .
Überprüfen Sie Ihre Ereignisprotokolle (Anwendung und Sicherheit), um festzustellen, ob Ausnahmen ausgelöst wurden.
quelle
Einfügen:
am Ende der Datei AssemblyInfo.cs
quelle
Für mich habe ich den Speicherort der Protokolldateien verschoben und erst als ich den Namen der Datei in etwas anderes geändert habe, wurde sie erneut gestartet.
Es scheint, dass nichts passiert, wenn bereits eine Protokolldatei mit demselben Namen vorhanden ist.
Danach habe ich die alte Datei umbenannt und den Protokolldateinamen in der Konfiguration wieder auf den ursprünglichen Wert geändert.
quelle
In meinem Fall wurde log4net aufgrund eines Leerzeichens in meinem Projektnamen nicht ordnungsgemäß protokolliert. Hat mich verrückt gemacht, warum der gleiche Code in einem anderen Projekt gut funktioniert hat, aber nicht in dem neuen. Räume. Ein einfacher Raum.
Achten Sie also auf Leerzeichen in Projektnamen. Ich habe meine Lektion gelernt.
quelle
In meinem Fall musste ich
IIS_IUSRS
der Protokolldatei die Berechtigung Lesen \ Schreiben erteilen .quelle
Stellen Sie sicher, dass der folgende Zeilencode in der Datei AssemblyInfo.cs vorhanden ist.
[Assembly: log4net.Config.XmlConfigurator (ConfigFile = "Web.config", Watch = true)]
Überprüfen Sie diese Zeile auch in der Application_start () -Methode.
quelle
Ihre Konfigurationsdatei scheint korrekt zu sein. Anschließend müssen Sie Ihre Log4net-Konfigurationsdatei in der Anwendung registrieren. Sie können also den folgenden Code verwenden:
Nach dem Registrierungsvorgang können Sie die folgende Definition aufrufen, um den Logger aufzurufen:
quelle
Für mich musste ich Logger in ein Nuget-Paket verschieben. Der folgende Code muss im NuGet-Paketprojekt hinzugefügt werden.
Weitere Informationen finden Sie unter https://gurunadhduvvuru.wordpress.com/2020/04/30/log4net-issues-when-moved-it-to-a-nuget-package/ .
quelle
Es gibt verschiedene Möglichkeiten, log4net zu verwenden. Ich fand es nützlich, als ich nach einer Lösung suchte. Die Lösung wird hier beschrieben: https://www.hemelix.com/log4net/
quelle