Mon ikke der allerede findes et logging API med velbeskrevne best practices?
Jeg selv foretrækker systemer hvor man logger med fire argumenter:
* Subsystem
* Severity
* Statisk tekst
* Data
Til subsystem angiver man typisk en klasse, således at man kan enable debug beskeder for en lille del af koden uden at man skal overvældes af horder af beskeder, og den angives typisk når man opretter et logger objekt.
Severity er noget ala INFO, WARNING, DEBUG, ERROR eller FATAL. Så kan man konfigurere at man vil have alt højere end eller lig med ERROR.
Statisk tekst er den typiske log besked, men må ikke være dynamisk...f.eks. ikke:
log(ERROR, "Could not open " + someFile);
Den skal være statisk så den er let at søge på og gruppere efter.
Filnavnet skal med i det sidste argument, som er 'data'. Det kunne også være en exception eller IP, som man ikke kunne forbinde til...den dynamiske del af loggen.
Spændende!
Tror jeg skal have forklaret lidt nærmere omkring subsystem. Ville du så lave en logger til hver klasse, som du så kan enable/disable?
Er rigtigt glad for din pointe med statisk tekst og er noget jeg arbejder med at få kollegaer til at forstå, fordi når man laver fejlhåndtering er det ikke specielt godt hvis du har noget kode der går ned imens den er ved at lave fejlhåndtering.
Hvordan laver du så Data? Gætter på du laver det som objekt, så ser på type og laver noget logning ud fra det?
Fx log(ERROR, "Could not open file", FileOpenException)
Hvordan ville du så logge det?
Could not open file
Exception detail
File access denied
at FileReader.ReadFile() [Line X]
at SuperReader.FindLinesWith() [Line X]
at DataProvider.BuildModel() [Line X]
at RenderEngine.PreparePresentation() [Line X]
at PresentUserLines() [Line X]