Logování přes Commons Logging

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… :-D

commons-logging.properties

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.

logging.properties

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.

Nastavení pomocí proměnných

Ú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:

  • org.apache.commons.logging.impl.AvalonLogger
  • org.apache.commons.logging.impl.Jdk13LumberjackLogger
  • org.apache.commons.logging.impl.Jdk14Logger
  • org.apache.commons.logging.impl.Log4JLogger
  • org.apache.commons.logging.impl.LogKitLogger
  • org.apache.commons.logging.impl.NoOpLog
  • org.apache.commons.logging.impl.SimpleLog

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

Petr Markvart, 21.12.2007 15:18:

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?

 
Lukáš Zapletal, 02.07.2008 14:21:

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.

 
If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
blog/logovani_pres_commons_logging.txt · Poslední úprava: 02.07.2008 14:42 autor: lzap
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0