Wir verwenden log4net und möchten die Konfiguration in einer externen Konfigurationsdatei angeben (wie wir es in anderen Abschnitten getan haben). Zu diesem Zweck haben wir den Abschnitt log4net in der App.config in Folgendes geändert:
...
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...
Und in der Log.Config-Datei (dasselbe Verzeichnis wie die App.config) haben wir:
<log4net>
<appender name="General" type="log4net.Appender.FileAppender">
<file value="myapp.log" />
<layout type="log4net.Layout.SimpleLayout" />
</appender>
<root>
<appender-ref ref="General" />
</root>
</log4net>
Wenn wir die App ausführen, wird jedoch keine Protokolldatei erstellt (und keine Protokollierung durchgeführt). Es werden keine Fehlermeldungen an die Konsole ausgegeben.
Wenn wir den Inhalt der Datei Log.config wieder in die Datei App.config verschieben (wobei die erste Codezeile oben ersetzt wird), funktioniert dies wie erwartet. Irgendeine Idee, warum es in einer externen Datei nicht funktioniert?
Antworten:
Haben Sie das folgende Attribut in Ihrer
AssemblyInfo.cs
Datei:und Code wie diesen zu Beginn jeder Klasse, für die Protokollierungsfunktionen erforderlich sind:
Ich habe einen Blog-Beitrag mit dieser und anderen Informationen hier .
quelle
Es gibt einen offenen Fehler in dieser Angelegenheit. Log4Net unterstützt das Attribut configSource von Konfigurationselementen nicht. Um eine reine Konfigurationsdateilösung zu verwenden, verwenden Sie den log4net.Config-Schlüssel in appSettings.
Schritt 1: Fügen Sie die normale Definition des Konfigurationsabschnitts hinzu:
Schritt 2: Verwenden Sie den magischen Schlüssel log4net.Config in appSettings.
Schritt 3: Tragen Sie einen Patch bei, um die Behandlung von configSource zu korrigieren.
quelle
Der Schritt, der verpasst wurde, ist
Dadurch wird die configSource verwendet. Stellen Sie sicher, dass Sie es einmal aufrufen, bevor Sie GetLogger () aufrufen.
quelle
Stellen Sie sicher, dass Ihre Datei log4net.config mit den folgenden Eigenschaften festgelegt ist:
Aktion erstellen: Inhalt
In Ausgabeverzeichnis kopieren: Immer kopieren
quelle
Entweder verwenden,
oder nur,
In beiden Fällen sollte sich die Datei Log4Net.config im Ausgabeverzeichnis befinden. Sie können dies tun, indem Sie die Eigenschaften der Datei Log4Net.config im Solution Explorer festlegen. Aktion erstellen - Inhalt und in Ausgabeverzeichnis kopieren - Immer kopieren
quelle
Achten Sie auf dieses Problem ...
In meinem Fall war alles richtig konfiguriert. Das Problem ist, dass ich Web Deploy in Visual Studio 2013 verwendet habe, um die Site auf WinHost.com hochzuladen und die ACLs zurückzusetzen auf dem Server zurückzusetzen. Dies wiederum widerrief alle Berechtigungen für Ordner und Dateien - log4net konnte die Datei nicht schreiben.
Mehr dazu lesen Sie hier:
So verhindern Sie, dass Web Deploy / MSBuild die Serverberechtigungen durcheinander bringt
Ich habe das Support-Team dort gebeten, die ACLs zurückzusetzen, und dann hat log4net angefangen, Protokolle zu spucken. :) :)
quelle
Angenommen, Sie hatten eine externe Konfigurationsdatei mit dem Namen log4net.config, die in Ihr Bereitstellungsverzeichnis kopiert wurde, können Sie sie folgendermaßen konfigurieren:
quelle
Ich hatte das gleiche Problem, abgesehen davon
Im laufenden Projekt hatte ich auch die folgende Zeile in einem Referenzprojekt:
Wenn ich diese Zeile in den referenzierten Projekten entfernt habe, werden die Protokolle angezeigt.
quelle
Es ist auch möglich, einen Debug-Modus für zu aktivieren
log4net
. Fügen Sie dies in die Datei App.config ein:und Sie erhalten zumindest Fehlermeldungen, aus denen Sie ableiten können, was genau schief gelaufen ist. In meinem Fall habe ich vergessen , einfach einstellen
Copy to output directory
zuCopy Always
.quelle
@Mitch, Es stellt sich heraus, dass es eine Datei mit der Deklaration [Assembly: ...] gibt, die jedoch nicht über die ConfigFile-Eigenschaft verfügt.
Nachdem ich es hinzugefügt und auf Log.config verwiesen hatte, funktionierte es. Ich hätte gedacht, dass es wie alle anderen Konfigurationsabschnitte (dh AppSettings) funktionieren und externe Konfigurationsdateien ohne Änderung akzeptieren würde.
Wir haben nicht die zweite Aussage, die Sie erwähnt haben, da wir sie in einen globalen statischen Protokollanbieter einbinden.
quelle
In meinem Fall habe ich folgende Fehlermeldung erhalten:
Und
log4net.config
die Datei war in Visual Studio 2017 Projekt, aber als ich die Datei einchecktebin\Debug
Ordner konnte ich es nicht finden.Mein ursprüngliches Montage-Setup war wie folgt:
Nach einiger Recherchezeit ändere ich es wie folgt und es funktioniert:
quelle
[Assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.config")]
Ändern Sie Kopieren in Ausgabeverzeichnis in Kopieren, falls neu
quelle
Es ist auch erwähnenswert, dass eine Web-App im Stammverzeichnis und nicht im Ordner bin angezeigt wird. Stellen Sie daher sicher, dass Sie dort die Konfigurationsdatei ablegen.
quelle