Categories
Java

Basic configuration of Log4j in Spring using a .properties file

There are 2 ways to configure Log4j in Spring using:

  • a .properties file
  • a .xml file

The configuration with the. xml file allows to take advantage of some aspects that can not be configured with the .properties file that is therefore regarded as obsolete.
This article will explain how to configure Log4j using the .properties file and the configuration with .xml file will be treated in a subsequent article.
The tools used for the development of this application are:

  • Java 1.6.0_22
  • Tomcat 6.0.20
  • Spring 3.0.4
  • Log4j 1.2.15
  • NetBeans 6.9
    1. Create a NetBeans project or in other IDE called HelloWorld (you can reuse the same project of a previous article)

 

    1. Add the following libraries in the directory /WEB-INF/lib:
      • commons-logging.jar
      • log4j-1.2.15.jar
      • org.springframework.aop-3.0.4.RELEASE.jar
      • org.springframework.asm-3.0.4.RELEASE.jar
      • org.springframework.aspects-3.0.4.RELEASE.jar
      • org.springframework.beans-3.0.4.RELEASE.jar
      • org.springframework.context-3.0.4.RELEASE.jar
      • org.springframework.context.support-3.0.4.RELEASE.jar
      • org.springframework.core-3.0.4.RELEASE.jar
      • org.springframework.expression-3.0.4.RELEASE.jar
      • org.springframework.instrument-3.0.4.RELEASE.jar
      • org.springframework.instrument.tomcat-3.0.4.RELEASE.jar
      • org.springframework.jdbc-3.0.4.RELEASE.jar
      • org.springframework.jms-3.0.4.RELEASE.jar
      • org.springframework.orm-3.0.4.RELEASE.jar
      • org.springframework.oxm-3.0.4.RELEASE.jar
      • org.springframework.test-3.0.4.RELEASE.jar
      • org.springframework.transaction-3.0.4.RELEASE.jar
      • org.springframework.web-3.0.4.RELEASE.jar
      • org.springframework.web.portlet-3.0.4.RELEASE.jar
      • org.springframework.web.servlet-3.0.4.RELEASE.jar
      • org.springframework.web.struts-3.0.4.RELEASE.jar

 

    1. Create the file /WEB-INF/web.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      
          <display-name>HelloWorld</display-name>
      
          <context-param>
              <param-name>log4jConfigLocation</param-name>
              <param-value>/WEB-INF/classes/log4j-helloworld.properties</param-value>
          </context-param>
      
          <listener>
              <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
          </listener>
      
          <servlet>
              <servlet-name>HelloWorld</servlet-name>
              <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
              <load-on-startup>1</load-on-startup>
          </servlet>
          <servlet-mapping>
              <servlet-name>HelloWorld</servlet-name>
              <url-pattern>*.html</url-pattern>
          </servlet-mapping>
      
          <session-config>
              <session-timeout>
                  30
              </session-timeout>
          </session-config>
          
          <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
          </welcome-file-list>
      
      </web-app>
      

      The specific section about LogjJ is contained in the tags context-param and listener.
      In the context-param tag you define the path to the .properties file to configure Log4j; if you use the standard name log4j.properties, Log4j would set itself without Log4jConfigListener and the variable webapp.root used in the file log4j-helloworld.properties would not be defined.

 

    1. Create the file /WEB-INF/HelloWorld-servlet.xml
      <?xml version="1.0" encoding="UTF-8"?>
      <beans xmlns="http://www.springframework.org/schema/beans"
      	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
      	xmlns:context="http://www.springframework.org/schema/context"
      	xsi:schemaLocation="http://www.springframework.org/schema/beans
              http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
              http://www.springframework.org/schema/context
              http://www.springframework.org/schema/context/spring-context-3.0.xsd">
          <context:component-scan base-package="it.helloworld.controller" />
      
          <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="prefix">
                  <value>/WEB-INF/views/</value>
              </property>
              <property name="suffix">
                  <value>.jsp</value>
              </property>
          </bean>
      
      </beans>
      

 

    1. Create the file /WEB-INF/classes/log4j-helloworld.properties
      log4j.rootLogger=ERROR, stdout, rollingFile
      
      log4j.appender.stdout=org.apache.log4j.ConsoleAppender
      log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
      log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
      
      log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
      log4j.appender.rollingFile.File=${webapp.root}/WEB-INF/logs/helloworld.log
      #log4j.appender.rollingFile.File=${catalina.home}/logs/helloworld.log
      log4j.appender.rollingFile.MaxFileSize=512KB
      log4j.appender.rollingFile.MaxBackupIndex=10
      log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
      log4j.appender.rollingFile.layout.ConversionPattern=%d %p [%c] - %m%n
      log4j.appender.rollingFile.Encoding=UTF-8
      

      In this example I used the variable webapp.root but you can use others like catalina.home.

 

    1. Create the file index.jsp in the root of the application
      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
      
      <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
              <title>Welcome Page</title>
          </head>
          <body>
              <jsp:forward page="helloWorld.html" />
          </body>
      </html>
      

 

    1. Create the directory /WEB-INF/views and the file /WEB-INF/views/helloWorld.jsp
      <%@page contentType="text/html" pageEncoding="UTF-8"%>
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
         "http://www.w3.org/TR/html4/loose.dtd">
      
      <html>
          <head>
              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
              <title>JSP Page</title>
          </head>
          <body>
              <h1>Hello World!</h1>
          </body>
      </html>
      

 

    1. Create the file /WEB-INF/classes/it/helloworld/controller/HelloWorldController.java
      package it.helloworld.controller;
      
      import org.apache.log4j.Logger;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.servlet.ModelAndView;
      
      @Controller
      public class HelloWorldController {
      
          private static org.apache.log4j.Logger log = Logger.getLogger(HelloWorldController.class);
      
          @RequestMapping(value = {"/index", "/helloWorld"})
          public ModelAndView helloWorld() {
      
              log.trace("Trace");
              log.debug("Debug");
              log.info("Info");
              log.warn("Warn");
              log.error("Error");
              log.fatal("Fatal");
      
              return new ModelAndView("helloWorld");
          }
      }
      

 

  1. Deploy and launch the application and verify the log in the console and in the file ${webapp.root}/WEB-INF/logs/helloworld.log

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.