Ich implementiere eine Logging-Lösung mit Log4Net für einen Windows NT Service. Ich kann einen Schalter in einer Konfigurationsdatei umdrehen, um mit der Protokollierung von Informationen im Dateisystem zu beginnen. Bisher konnte ich dies erreichen, indem ich einen rollenden Datei-Appender hatte und log4net "Watch" der Konfigurationsdatei hatte.Was passiert, wenn Log4Net nicht berechtigt ist, auf das Dateisystem zuzugreifen
Ich habe festgestellt, dass Log4Net leere Protokolldateien erstellt, sobald der Dienst gestartet wird, auch wenn alle Protokollierung deaktiviert ist und ich nicht beabsichtige, zu protokollieren.
ich nicht viele Informationen zu diesem Thema außer diesem Beitrag finden:
How to disable creation of empty log file on app start?
Meine Sorge ist, dass jemand den Dienst mit einem sehr niedrigen Niveau Satz von Berechtigungen einrichten könnte das wäre nicht habe sogar Zugriff, um die Protokolldateien im Dateisystem zu erstellen. Ich möchte nicht die Leistungseinbuße erleiden, dass jedes Mal, wenn ich eine Protokollierungsanweisung triff, Ausnahmen ausgelöst werden, selbst wenn ich nicht beabsichtige, mich einzuloggen.
Ich habe jede Logging-Anweisung mit check umgangen, um zu sehen, ob die Logging-Ebene aktiviert ist, bevor ich logge, aber ich bin immer noch nicht sicher, ob in den inneren Funktionen von log4net Ausnahmen noch geworfen werden wenn die im Appender konfigurierte Datei nicht erstellt wurde.
Weiß jemand, was Log4net tun wird, wenn es die Protokolldateien anfänglich nicht erstellen kann?
Hier sind ein paar Informationen über meine Konfiguration. Protokollierung funktioniert einwandfrei, wenn es aktiviert ist. Ich mache mir nur Sorgen um Berechtigungsprobleme.
Attribut auf meine Logging-Klasse für Konfigurationsänderungen zu sehen:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Logging.config", Watch = true)]
Appender:
<appender name="Test" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value=".\\AppLogs\\_test.%appdomain.log" />
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ALL" />
<levelMax value="FATAL" />
<acceptOnMatch value="false"/>
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="Test" />
</filter>
<appendToFile value="true" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="6MB" />
<rollingStyle value="Size" />
<staticLogFileName value="true" />
<filter type="log4net.Filter.DenyAllFilter" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level - %message%newline" />
</layout>
</appender>
Ich bin mir nicht sicher, ob dies 2011 zutrifft, aber zumindest bei den letzten Versionen von Log4Net wird intern geprüft, ob die angegebene Protokollstufe aktiviert ist, bevor tatsächlich versucht wird, etwas zu protokollieren. Die Funktionen wie IsDebugEnabled sind nur dann nützlich, wenn es CPU/Ressourcenintensiv ist, die an den Logger gesendeten Daten zu erzeugen. Related, Funktionen wie DebugFormat haben den doppelten Zweck, knapp zu sein, aber auch, dass es nicht die tatsächliche Zeichenfolge tun muss.Format, es sei denn, die Protokollebene ist aktiviert. – ShawnFumo