Log4j Tutorial «Prev  Next»


Log4J Layouts

The output of an appender can be customized by associating with it a Layout. These are the types of Layout available:
  1. Simple layout: org.apache.log4j.SimpleLayout
    SimpleLayout formats the output in a very simple manner, it prints the Level, then a dash '-' and then the log message.
  2. PatternLayout: org.apache.log4j.PatternLayout
    PatternLayout formats the output based on a conversion pattern specified, or if none is specified, the default conversion pattern.
  3. HTML layout: org.apache.log4j.HTMLLayout
    HTMLLayout formats the output as a HTML table.
  4. XMLLayout: org.apache.log4j.xml.XMLLayout
    XMLLayout formats the output as a XML.

Log4J Layout Examples

SimpleLayout and FileAppender
Here is a very simplistic example of a program implementing a SimpleLayout and FileAppender:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.FileAppender;
public class simpandfile {
static Logger logger = Logger.getLogger(simpandfile.class);
public static void main(String args[]) {
SimpleLayout layout = new SimpleLayout();
FileAppender appender = null;
try {
appender = new FileAppender(layout,"output1.txt",false);
} catch(Exception e) {}

logger.addAppender(appender);
logger.setLevel((Level) Level.DEBUG);

logger.debug("Here is some DEBUG");
logger.info("Here is some INFO");
logger.warn("Here is some WARN");
logger.error("Here is some ERROR");
logger.fatal("Here is some FATAL");
}
}


HTMLLayout and WriterAppender

Here is a very simplistic example of a program implementing a HTMLLayout and WriterAppender:
import java.io.*;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.WriterAppender;
public class HtmlandWrite {
 static Logger logger = Logger.getLogger(HtmlandWrite.class);
 public static void main(String args[]) {
  HTMLLayout layout = new HTMLLayout();
  WriterAppender appender = null;
  try { 
   FileOutputStream output = new FileOutputStream("output2.html");
   appender = new WriterAppender(layout,output);
  } catch(Exception e) {}
  logger.addAppender(appender);
  logger.setLevel((Level) Level.DEBUG);
  logger.debug("Here is some DEBUG");
  logger.info("Here is some INFO");
  logger.warn("Here is some WARN");
  logger.error("Here is some ERROR");
  logger.fatal("Here is some FATAL");
 }
}
PatternLayout and ConsoleAppender Here is a very simplistic example of a program implementing a PatternLayout and ConsoleAppender:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.ConsoleAppender;
public class ConsandPatt {
 static Logger logger = Logger.getLogger(ConsandPatt .class);
 public static void main(String args[]) {
  // Note, %n is newline
  String pattern = "Milliseconds since program start: %r %n";
  pattern += "Classname of caller: %C %n";
  pattern += "Date in ISO8601 format: %d{ISO8601} %n";
  pattern += "Location of log event: %l %n";
  pattern += "Message: %m %n %n";
  PatternLayout layout = new PatternLayout(pattern);
  ConsoleAppender appender = new ConsoleAppender(layout);
  logger.addAppender(appender);
  logger.setLevel((Level) Level.DEBUG);
  logger.debug("Here is some DEBUG");
  logger.info("Here is some INFO");
  logger.warn("Here is some WARN");
  logger.error("Here is some ERROR");
  logger.fatal("Here is some FATAL");
 }
}
Substitute symbol
%c Logger, %c{2 } last 2 partial names
%C Class name (full agony), %C{2 } last 2 partial names
%d{dd MMM yyyy HH:MM:ss } Date, format see java.text.SimpleDateFormat
%F File name
%l Location (caution: compiler-option-dependently)
%L Line number
%m user-defined message
%M Method name
%p Level
%r Milliseconds since program start
%t Threadname
%x, %X see Doku
%% individual percentage sign
Caution: %C, %F, %l, %L, %M slow down program run!