log4j: A complete example : Log4j « Language Basics « Java

log4j: A complete example

log4j: A complete example
Logging In Java with the JDK 1.4 Logging API and Apache log4j
by Samudra Gupta    
Apress Copyright 2003 


import org.apache.log4j.or.ObjectRenderer;
import org.apache.log4j.Logger;

import org.apache.log4j.spi.Filter;
import org.apache.log4j.spi.LoggingEvent;

class CustomerOrder {

  /** Holds value of property productName. */
  private String productName;

  /** Holds value of property productCode. */
  private int productCode;

  /** Holds value of property productPrice. */
  private int productPrice;

  /** Creates a new instance of CustomerOrder */
  public CustomerOrder() {

  public CustomerOrder(String name, int code, int price) {
    this.productCode = code;
    this.productPrice = price;
    this.productName = name;

   * Getter for property productName.
   * @return Value of property productName.
  public String getProductName() {
    return this.productName;

   * Setter for property productName.
   * @param productName
   *            New value of property productName.
  public void setProductName(String productName) {
    this.productName = productName;

   * Getter for property productCode.
   * @return Value of property productCode.
  public int getProductCode() {
    return this.productCode;

   * Setter for property productCode.
   * @param productCode
   *            New value of property productCode.
  public void setProductCode(int productCode) {
    this.productCode = productCode;

   * Getter for property productPrice.
   * @return Value of property productPrice.
  public int getProductPrice() {
    return this.productPrice;

   * Setter for property productPrice.
   * @param productPrice
   *            New value of property productPrice.
  public void setProductPrice(int productPrice) {
    this.productPrice = productPrice;

class ProductFilter extends Filter {
  /** Creates a new instance of ProductFilter */
  public ProductFilter() {

  public int decide(LoggingEvent event) {
    int result = this.ACCEPT;
    //obtaining the message object passed through Logger
    Object message = event.getMessage();
    //checking if the message object is of correct type
    if (message instanceof CustomerOrder) {
      CustomerOrder order = (CustomerOrder) message;
      int productCode = order.getProductCode();
      //checking for the product code greater than 100 only
      if (productCode < 100) {
        result = this.DENY;
    } else {
      //this filter can ignore this, pass to next filter
      result = this.NEUTRAL;

    return result;

class OrderRenderer implements ObjectRenderer {
  private static final String separator = "-";

  /** Creates a new instance of OrderRenderer */
  public OrderRenderer() {

  public String doRender(Object obj) {
    StringBuffer buffer = new StringBuffer(50);
    CustomerOrder order = null;
    String productName = null;
    int productCode = 0;
    int productPrice = 0;
    //check if the instance is of correct type CustomerOrder
    if (obj instanceof CustomerOrder) {
      order = (CustomerOrder) obj;
      productName = order.getProductName();
      productCode = order.getProductCode();
      productPrice = order.getProductPrice();

      buffer.append(new Integer(productCode).toString());
      buffer.append(new Integer(productPrice).toString());

    return buffer.toString();

public class ProductFilterDemo {
  private static Logger logger = Logger.getLogger("name");

  /** Creates a new instance of ProductFilterDemo */
  public ProductFilterDemo() {

  public void processOrder(CustomerOrder order) {

  public static void main(String args[]) {
    CustomerOrder order1 = new CustomerOrder("Beer", 101, 20);
    CustomerOrder order2 = new CustomerOrder("Lemonade", 95, 10);
    CustomerOrder order3 = new CustomerOrder("Chocolate", 223, 5);

    ProductFilterDemo demo = new ProductFilterDemo();
 * <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM
 * "log4j.dtd">
 * <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
 * <renderer renderedClass="com.apress.business.CustomerOrder"
 * renderingClass="com.apress.logging.log4j.renderer.OrderRenderer"> </renderer>
 * <appender name="A1" class="org.apache.log4j.ConsoleAppender">
 * <layout class="org.apache.log4j.PatternLayout"> <param
 * name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/> </layout> <filter
 * class="com.apress.logging.log4j.filter.ProductFilter"/> </appender>
 * <logger name="com.apress.logging.log4j"> <level value="debug"/> <appender-ref
 * ref="A1"/> </logger> </log4j:configuration>


Related examples in the same category

1.Example log4j Configuration File
2.log4j: simple loglog4j: simple log
3.log4j: log and servlet
4.log4j: File Based Logg Demolog4j: File Based Logg Demo
5.log4j: asynchronous log log4j: asynchronous log
6.log4j: layout demolog4j: layout demo
7.log4j: advanced loglog4j: advanced log
8.set the level of the root logger to DEBUG and set its appender as an appender named testAppender
9.define a named logger
10.set the appender named testAppender to be a console appender
11.set the layout for the appender testAppender
12.define the root logger with two appenders writing to console and file
13.define your own logger named com.foo
14.and assign level and appender to your own logger
15.define the appender named FILE
16.define the appender named CONSOLE
17.log4j Configuration File: #set the level of the root logger to DEBUG and set its appender as an appender named X
18.log4j Configuration File: set the appender named X to be a console appender
19.log4j Configuration File: set the layout for the appender X
20.log4j Configuration File: define the root logger with two appenders writing to console and file
21.log4j Configuration File: define your own logger named com.foo
22.log4j Configuration File: assign appender to your own logger
23.log4j Configuration File: define the appender named
24.log4j Configuration File: define the appender named CONSOLE
25.log4j.properties: set the level of the root logger to DEBUG (the lowest level) and set its appenders named DEBUG and CONSOLE
26.log4j.properties: set your own logger
27.log4j.properties: set the appender CONSOLE
28.log4j.properties: set the appender FILE
29.log4j.properties: set the appender ROLLING
30.log4j.properties: set the appender DAILY
31.log4j.properties: set the layout for the appenders
32.log4j.properties: file layout
33.log4j.properties: rolling layout
34.log4j.properties: daily layout
35.log4j config file: configuring the root logger
36.log4j config file: configuring the named logger
37.log4j config file: configuring the appender CONSOLE
38.log4j config file: configuring the layout TTCCLayout
39.html.properties: configuring the custom logger
40.xml.properties: configuring the custom logger
41.jdbc.properties configuration file for log4j
42.jms.properties configuration file for JMS
43.nt.properties for NT configuration
44.smtp.properties for EMail based logging
45.Pass the configuration file and configuration class
46.Logging Servlet with log4j