Um log4net als Logging-Framework in der eigenen Anwendung nutzen zu können, gibt es verschiedene Wege. Ich beschreibe hier den aus meiner Sicht sinnvollsten.
Dazu muss dies zunächst eingebunden werden. Das erfolgt am einfachsten über eine NuGet-Anhängigkeit.
Als nächstes muss dann die Konfigurationsdatei „log4net.xml“ erstellt werden. Diese sollte z.B. folgenden Inhalt haben:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<log4net> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs/project.log" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value=""."yyyyMMdd" /> <maxSizeRollBackups value="30" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p %m - [%F:%L]%n" /> </layout> </appender> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p %m%n" /> </layout> </appender> <root> <level value="DEBUG"></level> <!-- appender-ref ref="RollingLogFileAppender"></appender-ref --> <appender-ref ref="ConsoleAppender"></appender-ref> </root> </log4net> |
In der angegebenen Konfigurations-Datei werden zwei Logger konfiguriert:
- ein RollingFileAppender
- ein ConsoleAppender
Hier wird nur der ConsoleAppender als „root“-Logger – und damit als aktiver Logger – aktiviert. Möchte man beide haben, reicht es die auskommentierte Zeile im Bereich „root“ wieder zu aktivieren.
Damit diese Konfiguration aber auch verwendet werden kann, muss der Anwendung auf globaler Ebene noch ein Attribut mitgegeben werden. Das kann man entweder in einer zentrale Klasse auf Ebene des Namespace machen (etwa in der Klasse „program“, in der sich die Main-Methode befindet), oder man fügt es noch zentraler in die Datei „Properties/AssemblyInfo.cs“ ein:
1 |
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)] |
Empfehlen würde ich hier die AssemblyInfo als Ablageort.
Nun kann man sich einfach einen Logger holen und verwenden.
1 2 3 |
private static readonly ILog log = LogManager.GetLogger(typeof(klassenname)); [...] log.Debug("Logging-Ausgabe..."); |