But what if we want more, like IP ?
Add org.jboss.logmanager to jboss-deployment
Add AS7LoggingFilter
/**
* This filter adds user IP to the log4j
* mapped diagnostic context so that it can be included in
* formatted log output if desired, by adding %X{ip}
* to the pattern.
*
* @author Bernard Labno
*/
@Scope(ScopeType.APPLICATION)
@Name("as7LoggingFilter")
@BypassInterceptors
@Filter(within = "org.jboss.seam.web.authenticationFilter")
@Install(classDependencies = "org.jboss.logmanager.Logger",
dependencies = "org.jboss.seam.security.identity",
precedence = Install.BUILT_IN)
public class AS7LoggingFilter extends AbstractFilter {
// ------------------------ INTERFACE METHODS ------------------------
// --------------------- Interface Filter ---------------------
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
HttpSession session = ((HttpServletRequest) servletRequest).getSession(false);
if (session != null) {
Object attribute = session.getAttribute("org.jboss.seam.security.identity");
if (attribute instanceof Identity) {
Identity identity = (Identity) attribute;
Credentials credentials = identity.getCredentials();
String username = credentials != null ? credentials.getUsername() : null;
if (username != null) {
MDC.put("username", username);
}
}
}
MDC.put("ip", servletRequest.getRemoteAddr());
filterChain.doFilter(servletRequest, servletResponse);
MDC.remove("username");
MDC.remove("ip");
}
}
Modify POM dependency log4j-api to provided scopeModify pattern in standalone.xml or domain.xml by adding %X{ip}, i.e.:
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %X{ip} %X{username} %s%E%n"/>
Try %X{hostname} but it may not work with proxy.
No comments:
Post a Comment