Ich denke, dass log4net alles tut, was Sie für mich aufgelistet haben.
Steckbare Listener klingen wie Appender - es gibt viele davon. Tatsächlich habe ich sogar die fortlaufende Protokolldatei gehackt, um immer in .log zu enden (für Dateizuordnungen), dem E-Mail-Appender ein CC-Feld hinzugefügt und schließlich meine Lieblingswerte für optimiert der farbige Konsolen-Appender. Wenn ich so mutig sein darf - mein farbiges Konsolenglück:
<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
<mapping>
<level value="FATAL" />
<foreColor value="Yellow, HighIntensity" />
<backColor value="Red" />
</mapping>
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Purple, HighIntensity" />
</mapping>
<mapping>
<level value="WARN" />
<backColor value="Blue" />
<foreColor value="White" />
</mapping>
<mapping>
<level value="INFO" />
<backColor value="Green" />
<foreColor value="White" />
</mapping>
<mapping>
<level value="DEBUG" />
<foreColor value="White" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level %logger:%line %newline %message%newline" />
</layout>
Anpassbare Trace-Schalter: Log4net wird nur mit FATAL ERROR WARN INFO DEBUG geliefert, um die Ausführlichkeit zu erhöhen. Das einzige, was ich wirklich vermisse, ist AUDIT für wer-hat-was-Protokollierung.
Anpassbare Konfiguration: Ich verwende eine log4net.config-Datei, die ich zur Laufzeit lade (oder schreibe ein Protokoll in c: \ whining, dass ich die Konfiguration nicht finden kann.)
Try
Dim logConfigFile As FileInfo
logConfigFile = New FileInfo(".\log4net.config")
If logConfigFile.Exists Then
XmlConfigurator.Configure(logConfigFile)
Else
CreateEmergenceLogFile(logConfigFile.FullName)
End If
Catch ex As Exception
Console.Out.WriteLine("Could not load the log4net config file")
End Try
Nur eine große Anzahl von TraceListenern: Tut mir leid, dass ich diese übersprungen habe - ich nehme Ihr Wort dafür.
Korrelation von Aktivitäten / Bereichen: Meinen Sie, dass jede Datei (Leseklasse) ein eigenes benanntes Protokoll erhält, das separate Schwellenwerte für die Protokollebene haben kann? Tatsächlich können Sie die Protokollierung sogar in eine einzelne Klasse segmentieren (die in Wahrheit möglicherweise zu viel geworden ist ...)
In einer Klassendatei:
Private Shared _logger As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)
Private Shared _loggerAttribute As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Attribute")
Private Shared _loggerCache As log4net.ILog = _
log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName & ".Cache")
Der Service Trace Viewer: in der log4net.config:
<logger name="NipissingU.ADWrapper.EntryTools.Attribute">
<level value="INFO" />
</logger>
<logger name="NipissingU.ADWrapper.EntryTools.Cache">
<level value="WARN" />
</logger>
Alles ist in app.config / web.config konfigurierbar: Nun, vielleicht ist das eine gute Sache in ASP.NET, ich weiß es nicht, aber wenn ich Rich Client Bean Counting Apps mache, mag ich eine separate Konfigurationsdatei.
Alles hier ist nur meine eigenen kleinen Gebrauchstricks.
hth, -Mike