Ich verstehe, warum log4net app.config
Dateien zum Einrichten der Protokollierung verwendet. So können Sie die Protokollierung von Informationen leicht ändern, ohne Ihren Code neu kompilieren zu müssen. In meinem Fall möchte ich jedoch keine app.config
Datei mit meiner ausführbaren Datei packen . Und ich habe keine Lust, mein Protokollierungssetup zu ändern.
Gibt es eine Möglichkeit für mich, den Anmeldecode einzurichten, anstatt den zu verwenden app.config
?
Hier ist meine einfache Konfigurationsdatei:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\EventLog.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="1GB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
</appender>
<root>
<level value="Info" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="MemoryAppender" />
</root>
</log4net>
</configuration>
BEARBEITEN:
Um ganz klar zu sein: Es ist mein Ziel, keine XML-Datei zu haben. Nicht einmal als eingebettete Ressource, die ich in einen Stream verwandle. Mein Ziel war es, den Logger vollständig programmgesteuert zu definieren. Nur neugierig, ob es möglich ist und wenn ja, wo ich ein Beispiel für die Syntax finden könnte.
BasicConfigurator.Configure(hierarchy);
anstatt nur einzustellenhierarchy.Configured = true;
.log4net.Util.LogLog.InternalDebugging = true;
vor jedem anderen log4net-Aufruf hinzu, führen Sie sie dann unter Debugger aus und überprüfen Sie die Ausgabe. log4net zeigt Ihnen, wo etwas schief geht.Sie können auch XML vollständig entweichen, schrieb ich eine Probe mit minimaler programmatischer Konfiguration hier .
Kurz gesagt, hier ist was Sie brauchen
quelle
Ja, Sie können log4net konfigurieren, indem Sie Folgendes aufrufen:
Siehe die log4net-Dokumentation .
quelle
Alternativ können Sie ein benutzerdefiniertes Attribut erstellen, das von log4net.Config.ConfiguratorAttribute erbt und Ihre Konfiguration dort fest codiert:
Fügen Sie dann einer CS-Datei Folgendes hinzu:
quelle
Für diejenigen, die dem Root-Logger keinen Appender hinzufügen möchten, sondern dem aktuellen / anderen Logger:
quelle
Die akzeptierte Antwort funktioniert, nachdem ich zwei Einschränkungen gefunden habe:
roller.File
Immobilie verwendet hatte, begann es zu arbeiten.nuget_log4net.fsx:
quelle