原文地址:http://blog.donews.com/ooFrank/archive/2006/02/11/722553.aspx
在记录日志的时候,我们可能有这种需求,对于每个记录除了知道日志信息外,也要当前登录用户的信息。
可以这样解决:使用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的代码了
相关推荐
例如,`org.apache.logging.log4j.core.appender.ConsoleAppender`用于将日志输出到控制台,而`org.apache.logging.log4j.core.layout.PatternLayout`则可以按照自定义的模式格式化日志信息。 Log4j2的亮点之一是其...
"Log-Log4perl-1.36.tar.gz"这个压缩包包含了Log4perl的1.36版本源代码,用户可以解压后进行安装和使用。 Log4perl的核心理念是将日志记录分为四个主要部分:Logger、Appender、Layout和Filter。这四个组件协同工作...
Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-2.15.0....
Log4j是Java编程语言中最常用的日志记录框架之一,由Apache软件基金会开发。它提供了灵活的日志记录功能,使得开发者能够轻松地控制日志信息的输出格式、输出位置以及输出级别。此次提及的`log4j-api-2.12.4.jar`和`...
分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...
Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成log4j-api-2.15.0.jar 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3. 上传新版本log4j-api-...
内含log4j-api-2.15.0.jar和log4j-core-2.15.0.jar Apache log4j2零日漏洞,根据 log4j-2.15.0-rc2 版本编译生成 1.解压你的jar jar xvf XXX.jar 2. 删除旧版本jar cd ./BOOT-INF/lib rm -rf log4j-api-*.jar 3....
Appenders 是 Log4j 的输出目的地,用于将日志信息输出到不同的目的地。Log4j 提供了多种 Appenders,包括: 1. ConsoleAppender:将日志信息输出到控制台 2. FileAppender:将日志信息输出到一个文件 3. ...
log4j-core-2.17.0.jar
Log4j是一个用于记录应用运行时信息的开源库,由Apache软件基金会维护。它的主要功能包括: 1. **日志级别管理**:Log4j允许开发者定义多个日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,使得开发者可以控制需要...
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
log4j-core-2.17.1.jar
log4j-api-2.11.2.jar
- `log4j.appender.CONSOLE.layout.ConversionPattern`:定义了控制台日志的格式化模式,其中包含时间戳、线程名、优先级等信息。 ##### 2.3 文件输出配置 ```properties log4j.appender.FILE=org.apache.log4j....
Log4j比较全面的配置 log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true # 应用于控制台 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j....
log4j漏洞修复升级jar包(log4j-api-2.17.0.jar)
Java日志管理是开发过程中必不可少的部分,而Log4j作为Java世界中广泛使用的日志框架,因其灵活性和可配置性而备受青睐。本教程将详细解释如何配置Log4j,使其在不同操作系统环境下(Windows和Linux)都能统一将日志...
log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...
log4j漏洞修复升级jar包(log4j-core-2.17.0.jar)
此次发布的binaries版本包含了编译后的二进制文件,适用于那些不希望从源码编译但需要快速部署和更新Log4j的用户。 描述中提到的“解决了漏洞版本”指的是Log4j 2.x 在2021年末被发现了一个名为“Log4Shell”的高危...