Fejlhåntering er et essentielt krav for at sikre kvalitet og effektiv drift af software og webapplikationer. Der er desværre stadigvæk en ret stor tendens til fejlhåndtering ikke får det nødvendige fokus, og man ender tit med at bruge uhyre mængder af tid på detektiv arbejde for at finde fejl, når noget lige pludseligt ikke virker mere. Microsoft har udviklet nogle hjælpe biblioteker, som man frit og gratis kan benytte sig af i eget udviklet software. Nederst i dette indlæg vil man finde et download link til Enterprise Library 5.0.

Før man begiver sig ud i at at sætte et framework op til fejlhåndtering, bør man sørge for en effektiv 'exception handling' strategi. Man bør gøre udviklere opmærksomme på at håndtere exceptions på korrekt vis, og helst undgå brug af generelle catch() block i kode, der fanger alt.

Fx. bør man i en beregning sørge for at skrive en:
catch(DivideByZeroException ex){...}

Istedet for en generel:
catch(Exception ex){...}

Dette vil sikre, at fejl bliver håndteret efter deres natur, og logging af fejlene ligeledes kan håndteres særskilt og korrekt. Der findes masser af retningslinjer på nettet over dette emne. En anden dimension af fejlhåndtering, som man bør gøre en del af rammeværket, er differentiering mellem tekniske- og forretnings fejl. Tekniske fejl dækker over håndtering samt logging af fejl som fx. en afbrudt database forbindelse eller eksemplet med division med nul. Forretnings fejl dækker over forretningsregler, hvor noget programlogik ikke må udføres i noget kode, hvis fx. en pris er over et bestemt beløb. Disse fejl skal naturligvis også logges, og her kan man stadigvæk benytte sig af Enterprise Library. Der vil ikke fordybes yderligere i Exception handling eller fejlhåndterings strategi. Det kommer der nok et indlæg om på et senere tidspunkt.  

Der er for ikke længe siden kommet en ny version af Microsoft Enterprise Library i April 2010, og konfigurations interfacet er ligeledes blevet re-designet. Enterprise Library kommer med forskellige features fx. Dataaccess Application Block, Caching Block, Logging Application Block etc. Dette indlæg vil beskrive, hvordan man sætter Application Logging Block op, og hvordan man logger fejl fra en helt almindelig web applikation.

Efter endt installation kan Enterprise Library Configuration åbnes "C:\Program Files (x86)\Microsoft Enterprise Library 5.0\Bin\EntLibConfig.NET4.exe". Dette vil starte et konfigurations interface op.
For opsætning af Application Logging Block på en eksisterende webapplikation gør følgende:

- File -> Open og find web.config fil på webapplikationen.

Herefter vil man se følgende:

Enterprise Library 5.0

Man kan starte med at sætte database forbindelsen op. For at generere log databasen kan dette sql script køres på en eksisterende SQL Server (hvis man ikke vil gøre brug af 'Database Trace Listener' dvs. logging af fejl i en database, kan kørslen af scriptet samt database forbindelses opsætningen udelades).
Dette gøres ved at folde 'Database Settings' menuen ud. Som default vil 'LocalSqlServer' være angivet. Denne værdi skal ændres til noget andet fx. 'MyBlogConnection'.  'MyBlogConnection' menuen foldes ud og den rigtige connection streng angives til databasen. Der kan ligeledes vælges en anden database provider. I dette tilfælde benyttes 'System.Data.SqlClient'. Nu bør database forbindelsens konfiguration være på plads.

Vi starter med at definere et 'Message format', dvs. en definition af hvordan vores log message ser ud. Under 'Log Message Formatters' kan det eksisterende formatter foldes ud og navnet rettes til 'MyCompanyText Formatter' (brug firma navn eller andet). Under 'Template' kan man se en hel masse værdier, som log beskeden består af. Disse værdier kan tilpasses, men lad default værdierne stå.

Herefter knyttes der nogle 'lytteposter' til dvs. 'Target Listeners'. Under 'Logging Target Listeners' klikkes på '+' knappen og 'Add Logging Target Listener' vil dukker op. Ved klik på feltet, vil man blive præsenteret for forskellige muligheder. Vælg 'Event Log Listener', som sørger for at dirrigere fejlloggen ned i event loggen. Fold herefter 'Event Log Listener' ud og under 'Formatter' vælges 'MyCompanyText Formatter'. Herefter opretter man en 'Database Trace Listener' som sørger for persistering af data i en database. Under database Instance angives SQL Serveren. I dette tilfælde vælges 'LocalSqlServer'. Under 'Formatter' vælges 'MyCompanyText Formatter'. Tilsidst tilføjes 'Flat File TraceListener' og placering af logfilen angives under File Name (Til test kan Skrivebordet eller Desktop stien angives). Under 'Formatter' vælges 'MyCompanyText Formatter' igen.

Nu mangler vi blot kategorierne. I dette tilfælde angives der tre kategorier under 'Categories'. Disse tilføjes ved at trykke på '+' knappen. Her dukker en 'Add category' op og denne vælges. Navnet ændres til 'Debug' og en 'RaiseAlert' kategori tilføjes ligeledes.
Planen er at 'Debug' kategorien skal håndtere dirrigering af fejl i en flad fil. Dvs. at der under 'Debug' kategorien tilføjes vores allerede oprettede 'Flat File Tracelistener' ved at trykke på '+' under 'Listeners' og 'Name'. 'Debug' vil således kun have en enkel Trace listener knyttet til sig. 'RaiseAlert' foldes ud og udfra 'Listeners' og under 'Name' trykkes igen på '+' tre gange og i hver enkelt drop down angives henholdsvis 'Database Trace Listener', 'Event Log Listener' og 'Flat File Listener'. Under 'General' angives samme 'Listeners' som under 'RaiseAlert'.

Billedet vil se nogenlunde således ud:

Enterprise Library 5.0

For at kunne logge fejlene, skal der bruges en LogManager klasse. Man kan selvfølgelig selv programmere det. Alternativt kan klassen hentes her. Klassen kan placeres i et utility eller shared assembly, og kan benyttes på følgende måde:

} catch (InvalidOperationException ex) {
     ILog log = new LogManager();
     log.Error("Attempt to match an entity property with a reader field failed.", ex);
}

 

For at benytte sig af LogManager klassen, skal følgende *.dll filer refereres i den assembly, hvor LogManageren er placeret:

Microsoft.Practices.EnterpriseLibrary.Logging.Database.dll
Microsoft.Practices.EnterpriseLibrary.Logging.dll

Ved at fremprovokere en fejl vil man herefter se, at fejlen bliver persisteret ned i en database og i event loggen samt i en flad fil på skrivebordet. Debug kategoriseret fejl bliver kun skrevet ned i en flad fil.
For at bruge et web baseret logviewer kan NDashboard benyttes.

Hent Enterprise Library 5.0 her.
Find masser af hjælp og inspiration på codeplex.