Når du skriver computerkode i C # er det en god ide at inkludere loggingskode. På den måde, når noget går galt, ved du, hvor du skal begynde at kigge. Java-verdenen har gjort dette i årevis. Du kan bruge log4net til dette formål. Det er en del af Apache log4j 2, en populær open source-loggeramme.
Dette er ikke den eneste .NET-loggingsramme; der er mange. Dog Apache navnet er betroet, og den originale Java-loggingsramme har eksisteret i mere end 15 år.
Hvorfor bruge en Log4net-loggeramme?
Når en applikation eller server går ned, bliver du ved, undrer dig over, hvorfor. Var det en hardwarefejl, malware, måske et Denial of Service-angreb eller en mærkelig kombination af nøgler, der formår at omgå alle dine kodekontroller? Du ved bare ikke.
Du skal finde ud af, hvorfor der opstod et nedbrud, så det kan rettes. Når logføring er aktiveret, kan du muligvis se, hvorfor det skete.
Kom godt i gang
Download log4net-filen fra Apache log4net-webstedet. Kontroller integriteten af de downloadede filer ved hjælp af PGP-signatur eller MD5-kontrolsum. Kontrollsummen er ikke så stærke indikatorer som PGP-signaturen.
Brug af Log4net
Log4net understøtter syv niveauer af logging fra ingen til alle i stigende prioritet. Disse er:
- AF
- FATAL
- FEJL
- ADVARE
- INFO
- FEJLFINDE
- ALLE
De højere niveauer inkluderer alle de lavere. Ved fejlsøgning bruger du FEJLFINDE viser alt, men ved produktion er du måske kun interesseret i FATAL. Dette valg kan træffes på komponentniveau programmatisk eller i en XML Config-fil.
Loggere og appendere
For fleksibilitet bruger log4net loggere, appendere og layout. En logger er et objekt, der kontrollerer logging og er en implementering af ILog-interface, som specificerer fem boolske metoder: isDebugEnabled, IsInfoEnabled, IsWarnEnabled, IsErrorEnabled og IsFatalEnabled. Det specificerer også de fem metoder — Debug, Info, Warn, Error andFatal — sammen med overbelastning og fem formaterede strengversioner. Du kan se det fulde ILog-interface i log4net online-manualen.
Loggere tildeles et af niveauerne, men ikke ALLE eller FRA, kun de andre fem.
Appendikere kontrollerer, hvor loggningen går. Det kan være i en database, til en in-memory-buffer, til konsollen, til en ekstern vært, til en tekstfil med rullende logfiler, Windows Event Log eller endda til e-mail via SMTP. Der er i alt 22 appendører, og de kan kombineres, så du har masser af valg. Appendenter tilføjes (deraf navnet) til en logger.
Appendikser filtrerer begivenheder ved at matche underlag, hændelsesniveau, niveau af niveauer og start af loggernavnet.
Layouts
Endelig er der syv layouts, der kan tilknyttes en Appender. Disse styrer, hvordan begivenhedens meddelelse logges og kan omfatte undtagelsestekst, tidsstempellayouter og XML-elementer.
Konfiguration med XML
Selvom konfiguration kan udføres programmatisk, kan det også ske med XML Config-filer. Hvorfor foretrækker du konfigurationsfiler frem for kodeændringer? Enkelt, det er langt nemmere at få en support fyr til at ændre en config fil end at få en programmør til at ændre kode, teste og omdisponere en ny version. Så konfigurationsfiler er vejen at gå. Den mest enkle sti er at tilføje App.config dit projekt, som vist i eksemplet herunder:
Log4net-online-dokumentationen forklarer alle konfigurationsfil-felterne. Efter at have konfigureret App.config, tilføj ved hjælp af log4net og denne linje:
[samling: log4net. Config. XmlConfigurator (Watch = true)]
Desuden skal den faktiske logger hentes med et opkald til LogManager. GetLogger (...). GetLogger kaldes normalt med typen type (klasse), den bruges i, men dette funktionsopkald henter også, at:
System. Afspejling. MethodBase. GetCurrentMethod (). DeclaringType
Dette eksempel viser begge sider med en kommenteret, så du kan vælge.
ved hjælp af log4net;
[samling: log4net. Config. XmlConfigurator (Watch = true)]
navneområde gvmake
{
klasse Program
{
privat statisk readonly ILog log = LogManager. GetLogger (System. Afspejling. MethodBase. GetCurrentMethod
() .DeclaringType);
// privat statisk readonly ILog log = LogManager. GetLogger (typeof (Program));
statisk tomrum Main (streng [] args)
{
log. Debug ("Start af applikation");
}
}
}