公司项目Log4j 使用MDC 记录 sessionid

拥有回忆 提交于 2019-12-16 15:23:04

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

具体原理这里不再详述。三个地方加上配置即可。

web.xml

	<!-- Log4j日志过滤器 -->
	<filter>
		<filter-name>log4jFilter</filter-name>
		<filter-class>com.citicpru.imobile.web.filter.Log4jFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>log4jFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

log4j filter

public class Log4jFilter implements Filter {
	private final static Logger logger = Logger.getLogger(Log4jFilter.class);
	
	private final static String SESSION_ID="sessionId"; 

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		String logid = "",sessionId="";
		try {
			logid = ECSStringUtils.getUUID();
			HttpSession session=httpServletRequest.getSession(false);
			sessionId=session==null?"":session.getId();
			MDC.put("logid", logid);
			MDC.put(SESSION_ID, sessionId);
			chain.doFilter(request, response);
		} catch (Exception e) {
			logger.error("执行Log4j过滤器拦截到Controller执行失败,logid: " + logid, e);
			throw new ServletException(e);
		} finally {
			Map<?, ?> map = MDC.getContext();
			if (map != null) {
				map.clear();
			}
		}
	}

	@Override
	public void destroy() {
	}

}

配置,留意常量

#%m 输出代码指定消息
#%p 输出优先级
#%r 输出自应用启动到输出到该log信息耗时毫秒数
#%c 输出所属类全名
#%t 输出产生该日志的线程名
#%n 输出一个回车换行符 window为rn linux 为n
#%d 输出日志时间点的日期 %d{yyyy-mm-dd hh:mm:ss}
#%l 输出日志时间发生的位置 包括 类目名,线程以及代码中的行数

#Console Appender
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Threshold=info
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%p] [%d] [logid:%X{logid}] [sessionId:%X{sessionId}] %l -%m%n

#RollingFile Appender(Store Application Message, Hourly Rolling, Threshold is INFO)
log4j.appender.RollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.RollingFile.File=/webapp/iecs/imobile/log/i-mobile.log
log4j.appender.RollingFile.Threshold=info
log4j.appender.RollingFile.File.DatePattern=.yyyy-MM-dd-HH
log4j.appender.RollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.RollingFile.layout.ConversionPattern=[%p] [%d] [logid:%X{logid}] [sessionId:%X{sessionId}] %l -%m%n

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!