Amire szükség van:
- A log4j loggolási gyakorlat átdogondolására, de csak egy kicsit
- NDC használatára
Mit is csinálsz NDC. egyszerübb lenne, ha a API dokumentációból kiderülne, de itt is össze tudom foglalni Ahogy megy a program elhelyezünk loggolás szerű sorokat, amik az NDC-be helyezi a logüzeneteinket. Amikor pedig ténylegesen loggolásra kerül sor ott már a PatternLayout-ba behelyezett '%x' jellel az NDC-be összegyűjtött anyagot is elhelyezzük.
Hogyan kell a loggolási gyakorlatot megváltoztatni? A DEBUG levelt kisebb mértékben kell használni. Helyette gyakorlatilag csak a NDC-t. Majd mikor tényegesen valami hiba történik, akkor Pedig a log kiírás miatt eleve benne lesz minden információ Debugg level szintű részletességgel.
Hátrányok:
- igazából csak annyi, hogy a NDC kiíratás nem túl formázható alapesetben. Csak simán egy sorba kiírja a benne lévő adatokat, pedig teljesen jó lenne, ha mondjuk egymás alá is kiíratná, de legalábbis valami jól érzékelhető szeparátorral működne, de a jelenlegi sima szóköz nem a legmegfelelőbb.
- rejtett performancia gondok. Log4j eleve említi, hogy, ha nem is logol, akkor is meglepően nagy lehet a performacia veszteség a logüzenetek létrehozása miatt. Erre van benne a 'isDebuggEnabled' és barátai. NDC-ben sajnos ezt nem tudjuk megspórolni. Ha beleteszünk egy alacsonyabb szintű loggenabled ellenőrzést, akkor nem lesz elég részletes.
Igazából ezen két ok az, ami miatt talán egy Logcollector megvalósítás mégiscsak kellene. Mivel önálló komponens az első gondot azonnal megoldódik, mert én írom a kiíratási rutint. A második dolog, pedig MessageEntry objektumok létrehozásával oldódik meg. Egy sima gyűjtőobjektum létrehozása nem olyan teljesítményromboló, mint egy több száz kilós konfigurációs file objektum reprezentációjának kiiratása majdnem minden alkalommal (például).