在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要当前登录用户的信息。
可以这样解决:使用log4j的MDC
在web.xml加入 Filter:
<filter>
<filter-name>set log4j MDC for log2userId</filter-name>
<filter-class>UserFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>set log4j MDC for log2userId</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
UserFilter的代码如下:
import org.apache.log4j.Logger;
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 javax.servlet.http.HttpSession;
import org.apache.log4j.MDC;
import org.springside.bookstore.domain.Customer;
/**
* 记录当前使用者的信息到log4j.MDC
* @author frank
*
*/
public class UserFilter implements Filter {
/**
* Logger for this class
*/
private static final Logger logger = Logger.getLogger(UserFilter.class);
private final static String DEFAULT_USERID="anonymous";
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)request;
HttpSession session= req.getSession();
if (session==null){
MDC.put("userId",DEFAULT_USERID);
}
else{
Customer customer=(Customer)session.getAttribute("customer");
if (customer==null){
MDC.put("userId",DEFAULT_USERID);
}
else
{
MDC.put("userId",customer.getLoginid());
}
}
logger.info("test for MDC.");
chain.doFilter(request,response);
}
public void init(FilterConfig fc) throws ServletException {
// do nothing
}
public void destroy() {
// do nothing
}
}
在log4j.properties中加入新配置,示例使用jdbc存储
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
#log4j.appender.db.BufferSize=100
log4j.appender.db.URL=jdbc:ulr
log4j.appender.db.driver=org.hsqldb.jdbcDriver
log4j.appender.db.user=sa
log4j.appender.db.password=
log4j.appender.db.sql=INSERT INTO LOG4J_MSG (LOGINID,PRIORITY,LOGDATE,CLASS,METHOD,MSG) VALUES(‘%X{userId}’,’%p’,'%d{yyyy-MM-dd HH:mm:ss}’,'%C’,'%M’,'%m’)
%X{userId}:就是取出MDC的代码了
分享到:
相关推荐
LOG4J2的生产环境配置配置案例: 4.日志滚动,避免单个日志过大,可以按小时进行日志分割. <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" ignoreExceptions=...
此外,Log4j还支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这些特性可以附加上下文信息到日志记录中,对于调试多线程和分布式系统非常有用。 如果你对Log4j的具体使用还有疑问,可以...
- `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j进行日志记录的核心组件。 - `commons-logging-1.0.4.jar`: 这是Apache Commons Logging库,它是Java日志API的一个抽象...
9. **性能**:Log4j API设计得非常高效,只有在日志级别匹配时才会执行实际的日志记录操作,避免了不必要的计算和I/O操作。 10. **可扩展性**:Log4j API允许开发者通过插件机制轻松添加新的appender、filter和...
Log4j是Apache组织开发的一款广泛使用的Java日志框架,主要功能是用于记录应用程序运行过程中的各种日志信息。在Java编程中,日志记录是非常重要的一环,它可以帮助开发者追踪程序运行状态,定位错误,优化性能,...
四、Log4j的高级特性 1. **异步日志记录**:Log4j支持异步日志记录,通过AsyncAppender可以在不阻塞主线程的情况下高效地处理日志。 2. **自定义Appender和Layout**:如果内置的Appender和Layout无法满足需求,...
### Log4J完整说明与配置解析 #### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的...此外,Log4J还提供了丰富的扩展机制,如MDC(Mapped Diagnostic Context)等功能,进一步增强了其灵活性和适应性。
《log4j日志记录:理解Exception的处理与优化》 在Java开发中,日志记录扮演着至关重要的角色,它不仅帮助我们追踪程序运行时的状态,还为故障排查提供了宝贵的线索。Log4j作为一款广泛应用的日志框架,其对于异常...
在Java应用中使用Log4j进行日志记录的第一步,是创建并配置log4j的属性文件(log4j.properties)。这个文件定义了日志的级别、输出目的地以及日志的格式。以下是一个典型的log4j配置示例: ```properties # 设置根...
**日志系统在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行...同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。
Log4j是一款广泛使用的开源日志记录框架,由Apache软件基金会开发,提供了一套高效、灵活的日志处理方案。本文将详细介绍log4j的使用方法及其API帮助文档,同时涵盖如何利用log4j jar包进行项目集成。 **1. log4j的...
Log4j是Apache组织开发的一个强大的、灵活的日志记录框架,它允许我们控制日志信息的输出级别、格式以及输出位置。本篇文章将深入探讨Log4j的多个简单实例,帮助你理解和掌握其基本用法。 首先,Log4j由三个主要...
Log4j是Java平台上广泛使用的日志记录框架,尤其在企业级应用开发中不可或缺。本教程将深入浅出地教你如何有效地利用log4j进行日志管理,包括配置、API使用以及实践中的最佳实践。 首先,理解Log4j的基本概念至关...
5. **MDC与NDC**:Log4j-SLF4J-Impl支持Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC),为日志信息添加上下文信息,有助于追踪和诊断问题。 四、集成与使用 集成Log4j-SLF4J-Impl通常涉及...
通过这个"log4j使用实例.zip"压缩包,你可以学习到如何配置和使用Log4j进行日志记录,从而更好地理解和掌握Java后端开发中的日志管理。实践操作并理解每个组件的作用,将有助于你解决实际项目中遇到的问题。
**标题解析:** "J2EE复习积累(四)-Log4J" 指的是一个关于J2EE(Java 2 Platform, Enterprise Edition)技术系列的第四部分,主要聚焦于Log4J,这是一个广泛使用的Java日志框架。Log4J在Java应用中用于记录程序运行...
Apache Log4j 2是Java世界中广泛使用的日志记录框架之一,它的最新版本为2.4.1。Log4j 2相比其前身Log4j 1.x,提供了许多改进和新特性,使得它在性能、可配置性、可扩展性和稳定性方面有了显著提升。在本文中,我们...
**Log4j:Java日志记录的首选工具** 在Java编程中,日志记录是调试、性能分析和问题排查不可或缺的一部分。Log4j是Apache软件基金会的一个开源项目,它为Java应用程序提供了一种灵活且强大的日志记录框架。Log4j自...
Apache Log4j 是一个广泛使用的开源日志记录框架,为Java应用程序提供了强大的日志处理能力。在2.11.1这个版本中,Log4j 继续提供高效、灵活的日志记录解决方案,旨在满足各种开发需求。本文将深入探讨Log4j 2.11.1...