Wanneer u computercode in C # schrijft, is het een goed idee om logboekcode op te nemen. Op die manier weet u wanneer er iets fout gaat. De Java-wereld doet dit al jaren. U kunt hiervoor log4net gebruiken. Het is onderdeel van Apache log4j 2, een populair open-source logging framework.
Dit is niet het enige .NET logging framework; er zijn veel. De naam Apache wordt echter vertrouwd en het oorspronkelijke Java-logboekraamwerk bestaat al meer dan 15 jaar.
Wanneer een applicatie of server crasht, vraag je je af waarom. Was het een hardwarefout, malware, misschien een Denial of Service-aanval of een vreemde combinatie van sleutels die al uw codecontroles weet te omzeilen? Je weet het gewoon niet.
U moet achterhalen waarom er een crash is opgetreden, zodat deze kan worden gecorrigeerd. Als logboekregistratie is ingeschakeld, kunt u misschien zien waarom het is gebeurd.
Download het log4net-bestand van de Apache log4net-website. Controleer de integriteit van de gedownloade bestanden met behulp van de PGP-handtekening of MD5-controlesommen. De controlesommen zijn niet zo sterke indicatoren als de PGP-handtekening.
Log4net ondersteunt zeven niveaus van logboekregistratie van geen naar allen in toenemende prioriteit. Dit zijn:
De hogere niveaus omvatten alle lagere. Bij het debuggen toont alles met DEBUG alles, maar bij productie bent u misschien alleen geïnteresseerd in FATAL. Deze keuze kan programmatisch op componentniveau of in een XML Config-bestand worden gemaakt.
Voor flexibiliteit gebruikt log4net loggers, appenders en lay-outs. Een logger is een object dat logboekregistratie bestuurt en een implementatie is van de ILog-interface, die vijf booleaanse methoden specificeert: isDebugEnabled, IsInfoEnabled, IsWarnEnabled, IsErrorEnabled en IsFatalEnabled. Het specificeert ook de vijf methoden - Debug, Info, Warn, Error en Fatal - samen met overbelastingen en vijf opgemaakte stringversies. U kunt de volledige ILog-interface zien in de online handleiding van log4net.
Loggers krijgen een van de niveaus toegewezen, maar niet ALL of OFF, alleen de andere vijf.
Appenders bepalen waar de logging naartoe gaat. Het kan in een database zijn, in een buffer in het geheugen, naar de console, naar een externe host, naar een tekstbestand met rollende logs, het Windows Event Log of zelfs naar e-mail via SMTP. Er zijn in totaal 22 appenders en deze kunnen worden gecombineerd, zodat u veel keuzes hebt. Appenders worden toegevoegd (vandaar de naam) aan een logger.
Appenders filteren gebeurtenissen op overeenkomende substrings, gebeurtenisniveau, bereik van niveaus en begin van de loggernaam.
Ten slotte zijn er zeven lay-outs die aan een appender kunnen worden gekoppeld. Deze bepalen hoe het bericht van het evenement wordt vastgelegd en kunnen uitzonderingtekst, tijdstempellay-outs en XML-elementen bevatten.
Hoewel het configureren programmatisch kan worden gedaan, kan het ook worden gedaan met XML Config-bestanden. Waarom zou u liever configuratiebestanden hebben dan codewijzigingen? Eenvoudig, het is veel gemakkelijker om een supportmedewerker een configuratiebestand te laten wijzigen dan een programmeur ertoe te brengen code te wijzigen, een nieuwe versie te testen en opnieuw te implementeren. Dus configuratiebestanden zijn de weg te gaan. Het eenvoudigste pad is om App.config uw project toe te voegen, zoals in het onderstaande voorbeeld:
In de online documentatie van log4net worden alle velden van het configuratiebestand uitgelegd. Nadat u App.config hebt ingesteld, voegt u toe met log4net en deze regel:
[assembly: log4net.Config.XmlConfigurator (Watch = true)]
Bovendien moet de werkelijke logger worden opgehaald met een aanroep naar LogManager.GetLogger (...). De GetLogger wordt meestal aangeroepen met het type (klasse) waarin het wordt gebruikt, maar deze functieaanroep haalt ook op dat:
System.Reflection.MethodBase.GetCurrentMethod (). DeclaringType
In dit voorbeeld worden beide weergegeven met één opmerking, zodat u kunt kiezen.
log4net gebruiken;
[assembly: log4net.Config.XmlConfigurator (Watch = true)]
naamruimte gvmake
klassenprogramma
alleen-lezen statisch ILog log = LogManager.GetLogger (System.Reflection.MethodBase.GetCurrentMethod
() .DeclarationType);
// alleen privé statisch lezen ILog log = LogManager.GetLogger (typeof (Programma));
statische void Main (string [] args)
log.Debug ("Toepassing starten");