Apache Commons Logging (previously known as Jakarta Commons Logging or JCL) is a Java-based logging utility and a programming model for logging and for other toolkits. It provides APIs, log implementations, and wrapper implementations over some other tools.[1][2][3]
Log level
The following table defines the log levels and messages in Apache Commons Logging, in decreasing order of severity. The left column lists the log level designation in and the right column provides a brief description of each log level.
Level
Description
fatal
Severe errors that cause premature termination. Expect these to be immediately visible on a status console.
error
Other runtime errors or unexpected conditions. Expect these to be immediately visible on a status console.
warn
Use of deprecated APIs, poor use of API, 'almost' errors, other runtime situations that are undesirable or unexpected, but not necessarily "wrong". Expect these to be immediately visible on a status console.
info
Interesting runtime events (startup/shutdown). Expect these to be immediately visible on a console, so be conservative and keep to a minimum.
debug
Detailed information on the flow through the system. Expect these to be written to logs only.
trace
Most detailed information. Expect these to be written to logs only.
Two basic abstractions, Log and LogFactory, are used in Apache Commons Logging.[3]
Example
Sample code may look like as follows:
packagecom.cascadetg.ch09;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importorg.apache.commons.logging.impl.Jdk14Logger;publicclassLogGenerator{// Note that you pass in an instance of this class to the// log generator. This allows you to find the messages// generated by this class.privatestaticLoglog=LogFactory.getLog(LogGenerator.class);publicstaticvoidconfigJDKLogger(){try{((Jdk14Logger)log).getLogger().setLevel(java.util.logging.Level.ALL);((Jdk14Logger)log).getLogger().addHandler((java.util.logging.FileHandler)Class.forName("java.util.logging.FileHandler").newInstance());System.out.println("Added JDK 1.4 file handler");}catch(Exceptione){System.out.println("Unable to load JDK 1.4 logging.");e.printStackTrace();}}publicstaticvoidmain(String[]args){configJDKLogger();System.setErr(System.out);System.out.println();System.out.println("Test fatal log");try{Stringfoo=null;intx=0/(newInteger(foo)).intValue();}catch(Exceptione){log.fatal(e.getMessage(),e);}System.out.println();System.out.println("Test error log");try{Objectfoo=null;foo.toString();}catch(Exceptione){log.error(e.getMessage(),e);}System.out.println();System.out.println("Test warn log");try{Class.forName("com.cascadetg.NonexistantClass");}catch(Exceptione){log.warn("Can't find a non-existent class!");}System.out.println();System.out.println("Test info log");log.info("Starting app!");log.info("Quitting app!");System.out.println();System.out.println("Test debug log");if(1>2){log.debug("1 > 2 evaluated true");if(10%2==0)log.debug("10 % 2 is 0");elselog.debug("10 % 2 is not 0");}else{log.debug("1 > 2 evaluated false");}System.out.println();System.out.println("Test trace log");log.trace("Calling trace method.");log.trace("Calling trace method.");log.trace("Calling trace method.");log.trace("Calling trace method.");log.trace("Calling trace method.");System.out.println();System.out.println("Log test complete.");}}