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…

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



Tento zápisek vznikl převodem z mého starého blogu. Ne všechny texty byly takto převedeny, kompletní archiv již není k dispozici.