2007-10-29

Körkép

A Wikipediában remek írás található a loggolás alapkoncepcióiról.

A két (három) fő versenyző a log4j, a java logging API == java.util.logging == JUL == JSR47 és a Java Commons Logging == JCL. Ez utóbbi nem valódi loggoló framework, hanem csak egy adapter, ami futási időben megkeresi és használja a rendelkezésre álló frameworköt. Hasznos lehet, ha nem akarunk egy modult hozzákötni a log4j-hez, JUL-hoz vagy akármihez. Viszont vannak teljesítménybeli és funkcionális hátrányai a használatának, amit ez cikk részletez: Think again before adopting the commons-logging API

Íme egy vélemény a log4j és a JUL közti különbségekről. Régen olvastam már, de mélyen egyetértek vele annyi kiegészítéssel, hogy a folyamatos kényelmetlenségek miatt én még rühellem is a Java Logging Api-t.

(A szerző, Ceki Gülcü a log4j egyik alapembere. Van egy blogja is, amiben rokonszenves dolgokat ír. Pl. megemlíti Linus Torvalds GIT vs SVN-es előadását. Hát igen, nekem sem tetszett az a stílus, erről már nem is beszélve.)

Mostanában mintha kicsit külön utakon járna az Apache csoporttól, mert egy ideje a log4j utódján, a LogBack-en és a SLF4J-n dolgozik, ami a JCL utódja. (A Wikipediás cikk nem említi még ezeket.) Az SLF4J-ben lesz log4j támogatás elvileg. Nem tudom mennyire lesz hatékony az SLF4J, de a JCL helyett gondolom azért kellett új adapter framework-öt kezdeni, mert valamit máshogy (jobban) akartak megcsinálni.

A log4j már Java 1.1 óta létezik, a JUL pedig az 1.4-es jávában jött be. Belenézve a log4j honlapjába hamar kiderül, hogy nem létezik az 5-ös java újításait kihasználó verzió. A log4j 2.0 lett volna hivatott ezt a feladatot betölteni, de nem túl sok aktivitás látható a témában. Update 2008.03.17: Időközben Google-osok csináltak egy aranyos log5j nevű cuccot, ami log4j alapokon kihasználja a java 5 feature-jeit. Ha jól emlékszem nagyjából egy osztály az egész.

A LogBack és a SLF4J viszont hamarosan használható állapotba kerül. 0.9.X verziónál tart mostanában a LogBack. A javafórumon volt egy szócsata a logBack-ról és az isDebugEnabled használatáról. Egyik fontos tanulság számomra az volt, hogy az emberek sokféle stílusban loggolnak, de ez nagyban függhet a fejlesztett alkalmazástól is. Van aki sokszor tudja használni a toString-et, van akinek nincs erre lehetősége. Az isDebugEnabled pedig valójában csak akkor elhagyható, ha a paraméterlistában nincsenek azonnal kiértékelendő kifejezések. A vararg használata loggolásnál mindenesetre nagyon hasznos lehet String kiértékelés helyett.

Mikor melyiket érdemes választani? Konzervatív moduloknál JCL-t, ha felmerülhet olyan igény, hogy a modult befoglaló környezet nem log4j alapú, egyébként log4j-t. Új projekteknél lehet hogy már LogBack-et vagy SLF4J-t választanék, de azért előtte tájékozódnék, hogy vannak-e olyan appenderek, amik nekem kellhetnek. log4j-hez (mivel már elég régi motoros a szakmában) például elég sokféle appender van.

2 megjegyzés:

Kocka írta...

Ebbol a linus-beszedbol nem jott le nekem hogy mi a franc a baja a SVN-nel, csak fikazott es reklamozta a GIT-et.

cserepj írta...

Wicket 1.3 egyébként már át is állt SLF4J-re.