Vždycky se na pár desítek minut zarazím, když potřebuji vytvořit pro nějakou aplikaci triviální logování pomocí Jakarta Commons Logging knihovny za použití logovacího subsystému z JRE 1.4 nebo vyšší. Bohužel dokumentace k oběma API neobsahuje žádný příklad, takže obvykle hledám na internetu nebo ve starých projektech. Raději to tedy napíšu na svůj blog, abych to příště nehledal…
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
Použije logovací subsystém z Javy. Rád využívám složeb tohoto API, protože nač přidávat k projektu další knihovnu (např. Log4J)? Lze také specifikovat factory třídu, která se použije, ale toto není nutné:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
Zajímavé je, že knihovna commons-logging automaticky použije JDK 1.4 logger, pokud není nakonfigurována jinak a pokud v CLASSPATH nenajde knihovnu log4j (které dává přednost). Bohužel tuto knihovnu často v CLASSPATH mám kvůli závislostem, proto je třeba commons-logging explicitně nastavit.
handlers = java.util.logging.ConsoleHandler,java.util.logging.FileHandler formatters=java.util.logging.SimpleFormatter .level = ALL java.util.logging.ConsoleHandler.level = SEVERE java.util.logging.FileHandler.level = INFO java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter java.util.logging.FileHandler.pattern = APLIKACE.log
Jednoduchá konfigurace – na konzoli se vypisují jen chyby, do souboru APLIKACE.log pak info hlášky. Tento soubor můžete uložit třeba do domovského adresáře uživatele (pomocí masky %u) – více info u dokumentaci třídy FileHandler.
Úroveň logování lze také nastavit pomocí systémové proměnné Javy: org.apache.commons.logging.Log. Můžete ji nastavit na příkazové řádce parametrem -D, nebo z programu (System.setProperty). Dostupné loggery (volby) v implementaci commons-logging verze 1.1 jsou:
Poslední jmenovaný implementuje jednoduché logování na standardní/chybový výstup (není nutná žádná přídavná knihovna). Předposlední jmenovaný logger je takzvaný nulový – všechny logy se zahazují. Pro Log4j nebo LogKit volby je potřeba mít v CLASSPATH adekvátní knihovny, u JDK 1.4 loggeru je nutné mít potřebnou verzi JRE (1.4+). Příklad spuštění programu, u kterého chcete zcela vypnout logování (za předpokladu, že program loguje pouze přes commons-logging fasádu):
java -Dorg.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog -cp . cz.app.MyApp
Další informace o nastavení logování přes commons-logging jsou v oficiální dokumentaci: http://commons.apache.org/logging/guide.html#Configuration
Diskuze
A jak je to s aktivaci tech souboru s priponou properties? Cetl jsem, ze to ma byt v classpath a nejak to nechapu.
Dal jsem to na uroven JAR souboru (Classpath zalozka u konfigurace spusteni Java aplikace), ale nezabralo to. Nebyla by nejaka rada?
Soubor musi byt v CLASSPATH, tzn. pokud mate v CLASSPATH aktuální adresář, tak jej dáte tam. Pokud máte v CLASSPATH soubor aplikace.jar, musí být tento soubor sbalený v JARu (na nejvyšší úrovni – v žádném podadresáři).
Pomocí systémové proměnné lze také specifikovat umístění souboru. Tuto možnost do zápisu připíšu.