När du skriver datorkod i C # är det en bra idé att inkludera loggningskod. På det sättet, när något går fel, vet du var du ska börja titta. Java-världen har gjort detta i flera år. Du kan använda log4net för detta ändamål. Det är en del av Apache log4j 2, ett populärt ramverk för öppen källkod.
Detta är inte det enda .NET-loggningsramverket; det är många. Men Apache namnet är betrodd och det ursprungliga Java-loggningsramverket har funnits i mer än 15 år.
Varför använda en Log4net-loggningsram?
När en applikation eller server kraschar får du undra varför. Var det ett maskinvarufel, skadlig programvara, kanske en Denial of Service-attack eller någon udda kombination av nycklar som lyckas kringgå alla dina kodkontroller? Du vet bara inte.
Du måste ta reda på varför en krasch inträffade så att den kan korrigeras. När loggningen är aktiverad kanske du kan se varför det hände.
Komma igång
Ladda ner log4net-filen från Apache log4net-webbplatsen. Verifiera integriteten för de nedladdade filerna med PGP-signatur eller MD5-kontrollsumma. Kontrollsummorna är inte lika starka indikatorer som PGP-signaturen.
Använda Log4net
Log4net stöder sju loggningsnivåer från ingen till alla i ökande prioritet. Dessa är:
- AV
- DÖDLIG
- FEL
- VARNA
- INFO
- RÄTTA TILL
- ALLT
De högre nivåerna inkluderar alla de lägre. Vid felsökning använder du RÄTTA TILL visar allt, men när det gäller produktion kanske du bara är intresserad av FATAL. Detta val kan göras på komponentnivå programmatiskt eller i en XML Config-fil.
Loggar och appendrar
För flexibilitet använder log4net loggare, appendrar och layouter. En logger är ett objekt som styr loggning och är en implementering av ILog-gränssnittet, som specificerar fem booleska metoder: isDebugEnabled, IsInfoEnabled, IsWarnEnabled, IsErrorEnabled och IsFatalEnabled. Den anger också de fem metoderna - Debug, Info, Warn, Error andFatal - tillsammans med överbelastningar och fem formaterade strängversioner. Du kan se hela ILog-gränssnittet i log4net online-manualen.
Loggarna tilldelas en av nivåerna men inte ALLA eller AV, bara de andra fem.
Appendenter kontrollerar vart loggningen går. Det kan vara i en databas, till en buffert i minnet, till konsolen, till en fjärrvärd, till en textfil med rullande loggar, Windows Event Log eller till och med e-post via SMTP. Det finns 22 appendrar i alla, och de kan kombineras så att du har många val. Bilagare läggs till (därav namnet) till en logger.
Appendenter filtrerar händelser genom att matcha underlag, händelsesnivå, nivånivå och början av loggarnamnet.
layouter
Slutligen finns det sju layouter som kan associeras med en appendator. Dessa styr hur händelsens meddelande loggas och kan inkludera undantagstext, tidsstämpellayouter och XML-element.
Konfigurera med XML
Även om konfigurering kan göras programmatiskt kan det också göras med XML Config-filer. Varför skulle du föredra konfigurationsfiler framför kodändringar? Enkelt, det är mycket lättare att få en supportkille att göra en ändring av en konfigurationsfil än att få en programmerare att ändra kod, testa och ominstallera en ny version. Så konfigurationsfiler är vägen att gå. Den enklaste möjliga vägen är att lägga till App.config ditt projekt, som visas i exemplet nedan:
Online-dokumentationen log4net förklarar alla konfigurationsfältfält. Efter att ha installerat App.config, lägg till med log4net och den här raden:
[montering: log4net. Config. XmlConfigurator (Watch = true)]
Dessutom måste den faktiska loggern hämtas med ett samtal till LogManager. GetLogger (...). GetLogger kallas vanligtvis med typen typ (klass) som den används i, men detta funktionssamtal hämtar också att:
Systemet. Reflexion. MethodBase. GetCurrentMethod (). DeclaringType
Detta exempel visar båda in med en kommenterad, så du kan välja.
med log4net;
[montering: log4net. Config. XmlConfigurator (Watch = true)]
namnutrymme gvmake
{
klassprogram
{
privat statisk readonly ILog log = LogManager. GetLogger (System. Reflexion. MethodBase. GetCurrentMethod
() .DeclaringType);
// privat statisk readonly ILog log = LogManager. GetLogger (typeof (Program));
static void Main (string [] args)
{
logga. Debug ("Programstart");
}
}
}