log4j Tutorial - Log4j Logging Levels








The org.apache.log4j.Level class has the following levels.

And we can also define our custom levels by sub-classing the Level class.

Level Description
ALL All levels including custom levels.
DEBUG debug message log.
ERROR error message log, application can continue running.
FATAL severe error message log, has to abort running the application.
INFO informational messages.
OFF The highest possible rank and is intended to turn off logging.
TRACE Higher level than DEBUG.
WARN for warning message.




Control the Level

In Log4j, the levels are ordered.

A log request of level X in a logger with level Y, is enabled if A >= Y.

For the standard levels, we have ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF.

The following example shows how to filter all the DEBUG and INFO messages.

It uses logger method setLevel(Level.XXX) to set a desired logging level.

The following code prints all the messages except Debug and Info:

import org.apache.log4j.*;

public class Main {
   private static org.apache.log4j.Logger log = Logger
                                    .getLogger(Main.class);
   public static void main(String[] args) {
      log.setLevel(Level.WARN);

      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}

When you compile and run LogClass program it would generate following result:

Warn Message!
Error Message!
Fatal Message!




Set Levels using Configuration File

We can use Log4j configuration file to control the log level setting without changing source code.

The following code shows how to do log.setLevel(Level.WARN) via configuration file.

# Define the root logger with appender file
log = c:/log4j
log4j.rootLogger = WARN, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Now let us use our following program:

import org.apache.log4j.*;

public class Main {
   private static org.apache.log4j.Logger log = Logger.getLogger(Main.class);
   public static void main(String[] args) {
      log.trace("Trace Message!");
      log.debug("Debug Message!");
      log.info("Info Message!");
      log.warn("Warn Message!");
      log.error("Error Message!");
      log.fatal("Fatal Message!");
   }
}