Java Struts – Logging with Log4j Example

Download Log4j: http://logging.apache.org/log4j/index.html

Log4j Appender:
Create a Log4j properties file (log4j.properties) and define the appender details (where to log and log file details). And put the log4j.properties into your project classpath.

log4j.properties

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:\\loging.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Root logger option
log4j.rootLogger=error, file, stdout

Struts Action Class:

//...
public class UserAction extends Action{

  private static final Logger logger = Logger.getLogger(UserAction.class);

  public ActionForward execute(ActionMapping mapping,ActionForm form,
	HttpServletRequest request,HttpServletResponse response)
  throws Exception {

	if(logger.isDebugEnabled()){
		logger.debug("Starting started");
	}
	//...

Struts Custom Exception Handler:

//...
public class MyCustomExceptionHandler extends ExceptionHandler{

  private static final Logger logger =
                       Logger.getLogger(MyCustomExceptionHandler.class);

  @Override
  public ActionForward execute(Exception ex, ExceptionConfig ae,
	ActionMapping mapping, ActionForm formInstance,
	HttpServletRequest request, HttpServletResponse response)
	throws ServletException {

	//log the error message
	logger.error(ex);

	return super.execute(ex, ae, mapping, formInstance, request, response);
  }

}

Log4j Output File Sample- c:\\logging.log

12:45:52,210 ERROR MyCustomExceptionHandler:25 - java.io.IOException
12:48:27,672 ERROR MyCustomExceptionHandler:25 - ExceptionConfig[type=
java.io.IOException,handler=
com.javac.common.exception.MyCustomExceptionHandler,
key=error.global.mesage,path=/pages/error.jsp,scope=request]
12:48:54,102  INFO PropertyMessageResources:209 - Operating in Default mode [null]
12:48:54,134 DEBUG sax:1410 - startElement(,web-app,web-app)
12:48:54,134 DEBUG Digester:1417 -   Pushing body text ''
12:48:54,134 DEBUG Digester:1436 -   New match='web-app'
12:48:54,134 DEBUG Digester:1464 -   No rules found matching 'web-app'.

Java Struts – Handle HTTP 404 Error

The “HTTP Status 404” error code shows that the system can not find the page or resource you requested. In practice, you should display your custom 404 error page. However, it is handle in web.xml , not in Struts framework. For example,

<web-app>
...
<error-page>
<error-code>404</error-code>
<location>/pages/error404.jsp</location>
</error-page>

</web-app>

When system hit the 404 error, it will forward to your custom 404 error page “/pages/error404.jsp“.

struts-config.xml

<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
<display-name>Maven Struts Examples</display-name>

<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>
/WEB-INF/struts-config.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>

<error-page>
<error-code>404</error-code>
<location>/pages/error404.jsp</location>
</error-page>

</web-app>