`
hanyi366
  • 浏览: 290468 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

使用log4j MDC记录操作员的信息

阅读更多
在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要当前登录用户的信息。
可以这样解决:使用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 mdc配置

    LOG4J2的生产环境配置配置案例: 4.日志滚动,避免单个日志过大,可以按小时进行日志分割. &lt;RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/app-%d{MM-dd-yyyy}.log.gz" ignoreExceptions=...

    java-日志-log4j.7z

    此外,Log4j还支持MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context),这些特性可以附加上下文信息到日志记录中,对于调试多线程和分布式系统非常有用。 如果你对Log4j的具体使用还有疑问,可以...

    log4j简单使用

    - `log4j-1.2.14.jar`: 这是Log4j 1.2.14版本的jar包,包含了Log4j的全部类和方法,是使用Log4j进行日志记录的核心组件。 - `commons-logging-1.0.4.jar`: 这是Apache Commons Logging库,它是Java日志API的一个抽象...

    log4j-API-最新稳定版本log4j-1.2.17

    9. **性能**:Log4j API设计得非常高效,只有在日志级别匹配时才会执行实际的日志记录操作,避免了不必要的计算和I/O操作。 10. **可扩展性**:Log4j API允许开发者通过插件机制轻松添加新的appender、filter和...

    log4j记录Debug日志

    Log4j是Apache组织开发的一款广泛使用的Java日志框架,主要功能是用于记录应用程序运行过程中的各种日志信息。在Java编程中,日志记录是非常重要的一环,它可以帮助开发者追踪程序运行状态,定位错误,优化性能,...

    log4j jarjar包

    四、Log4j的高级特性 1. **异步日志记录**:Log4j支持异步日志记录,通过AsyncAppender可以在不阻塞主线程的情况下高效地处理日志。 2. **自定义Appender和Layout**:如果内置的Appender和Layout无法满足需求,...

    Log4J完整说明和配置

    ### Log4J完整说明与配置解析 #### 一、Log4J简介 Log4J是Apache的一个开源项目,用于提供灵活的...此外,Log4J还提供了丰富的扩展机制,如MDC(Mapped Diagnostic Context)等功能,进一步增强了其灵活性和适应性。

    log4j日志记录对于exception的记录问题

    《log4j日志记录:理解Exception的处理与优化》 在Java开发中,日志记录扮演着至关重要的角色,它不仅帮助我们追踪程序运行时的状态,还为故障排查提供了宝贵的线索。Log4j作为一款广泛应用的日志框架,其对于异常...

    使用log4j写日志文件

    在Java应用中使用Log4j进行日志记录的第一步,是创建并配置log4j的属性文件(log4j.properties)。这个文件定义了日志的级别、输出目的地以及日志的格式。以下是一个典型的log4j配置示例: ```properties # 设置根...

    log4j日志配置以及配置文件详解

    **日志系统在软件开发中扮演着至关重要的角色,它能帮助开发者跟踪程序运行...同时,不断学习和探索log4j的高级特性,如异步日志、MDC(Mapped Diagnostic Context)等,可以进一步提升日志系统的实用性和可维护性。

    log4j包的使用说明及api帮助文档

    Log4j是一款广泛使用的开源日志记录框架,由Apache软件基金会开发,提供了一套高效、灵活的日志处理方案。本文将详细介绍log4j的使用方法及其API帮助文档,同时涵盖如何利用log4j jar包进行项目集成。 **1. log4j的...

    log4j多个简单实例

    Log4j是Apache组织开发的一个强大的、灵活的日志记录框架,它允许我们控制日志信息的输出级别、格式以及输出位置。本篇文章将深入探讨Log4j的多个简单实例,帮助你理解和掌握其基本用法。 首先,Log4j由三个主要...

    手把手教你使用log4j

    Log4j是Java平台上广泛使用的日志记录框架,尤其在企业级应用开发中不可或缺。本教程将深入浅出地教你如何有效地利用log4j进行日志管理,包括配置、API使用以及实践中的最佳实践。 首先,理解Log4j的基本概念至关...

    log4j-slf4j-impl.zip

    5. **MDC与NDC**:Log4j-SLF4J-Impl支持Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC),为日志信息添加上下文信息,有助于追踪和诊断问题。 四、集成与使用 集成Log4j-SLF4J-Impl通常涉及...

    log4j使用实例.zip

    通过这个"log4j使用实例.zip"压缩包,你可以学习到如何配置和使用Log4j进行日志记录,从而更好地理解和掌握Java后端开发中的日志管理。实践操作并理解每个组件的作用,将有助于你解决实际项目中遇到的问题。

    J2EE复习积累(四)-Log4J

    **标题解析:** "J2EE复习积累(四)-Log4J" 指的是一个关于J2EE(Java 2 Platform, Enterprise Edition)技术系列的第四部分,主要聚焦于Log4J,这是一个广泛使用的Java日志框架。Log4J在Java应用中用于记录程序运行...

    apache-log4j-2.4.1-bin.zip

    Apache Log4j 2是Java世界中广泛使用的日志记录框架之一,它的最新版本为2.4.1。Log4j 2相比其前身Log4j 1.x,提供了许多改进和新特性,使得它在性能、可配置性、可扩展性和稳定性方面有了显著提升。在本文中,我们...

    log4j日志记录工具

    **Log4j:Java日志记录的首选工具** 在Java编程中,日志记录是调试、性能分析和问题排查不可或缺的一部分。Log4j是Apache软件基金会的一个开源项目,它为Java应用程序提供了一种灵活且强大的日志记录框架。Log4j自...

    log4j-2.11.1.jar

    Apache Log4j 是一个广泛使用的开源日志记录框架,为Java应用程序提供了强大的日志处理能力。在2.11.1这个版本中,Log4j 继续提供高效、灵活的日志记录解决方案,旨在满足各种开发需求。本文将深入探讨Log4j 2.11.1...

Global site tag (gtag.js) - Google Analytics