Skip to content

Add session user info to log4j logging (custom file appender)

Ever wondered how to add additional session related info in log4j logging?

I like to see logged in user, along with session-id info in logging messages in applications, where analyzing secure operations becomes critical (healthcare, financial apps).

Here’s a sample filter log4j’s MDC to add diagnostic context in log messages.

package com.cramer.srf.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.MDC;

import com.cramer.srf.util.SRFUtils;

/**
 * Filter that adds user session info in log4j MDC (Mapped Diagnoistic Context)
 *
 */
public class Log4jSessionFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain filterChain) throws IOException, ServletException {
		if (request instanceof HttpServletRequest) {
			if (SRFUtils.getLoggedUser() != null) {
			    MDC.put("user", SRFUtils.getLoggedUser());
			}			
		}
		filterChain.doFilter(request, response);
	}

	@Override
	public void destroy() {
		// NO OP
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// NO OP
	}
}

The corresponding log4j file. Note ‘[%X{user}]‘ in the ConversionPattern below.

<!-- File appender -->
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="logs/rx.log" />
    <param name="Append" value="true" 
    <param name="DatePattern" value="'.'yyyy-ww" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{ISO8601}  %-5p [%X{user}] [%t:%X{SESSION}] %c - %m%n" />
    </layout>
</appender>
[Slashdot] [Digg] [Reddit] [del.icio.us] [Facebook] [Technorati] [Google] [StumbleUpon]

2 Comments

  1. Puja wrote:

    Thanks a lot for the sample regarding the Web Filter and you given information is very useful for the users.

    Friday, April 27, 2012 at 2:33 am | Permalink
  2. Lionel wrote:

    MDC logs only data per thread. When I try to login, the data is posted to one thread and not every thread that the container creates.

    Thursday, February 21, 2013 at 9:46 am | Permalink

Post a Comment

Your email is never published nor shared. Required fields are marked *
*
*