log4j配置文件:
- XML code
log4j.rootLogger=warn,dblog4j.appender.db=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.db.BufferSize=1log4j.appender.db.URL=jdbc\:jtds\:sqlserver\://server\:1434/pcbsynlog4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driverlog4j.appender.db.user=salog4j.appender.db.password=711log4j.appender.db.sql=insert into logInfo(userId,userName,lclass,lmethod,lTime,llevel,message) values ('%X{userId}','%X{userName}','%C','%M','%d{yyyy-MM-dd HH\:mm\:ss}','%p','%m')log4j.appender.db.layout=org.apache.log4j.PatternLayout
使用MDC 将 userId userName 存入
- Java code
session.setAttribute("userId", userInfo.getLoginName().toString() .trim()); session.setAttribute("userName", userInfo.getUserName().toString() .trim());MDC.put("userId",userInfo.getLoginName()); MDC.put("userName",userInfo.getUserName());
现在怪异的是:userId、userName 有时候是有值的,有时候又是null值!
如图:
------解决方案--------------------
信息太少,只能靠猜。
------解决方案--------------------
session.setAttribute("userId", userInfo.getLoginName().toString().trim());
session.setAttribute("userName", userInfo.getUserName().toString().trim());
MDC.put("userId",userInfo.getLoginName());
MDC.put("userName",userInfo.getUserName());
这些代码是只有一处,还是有多处
建议将涉及到同样操作的语句的地方都搂出来检查检查
------解决方案--------------------
MDC是全局的吗,是一个Map吗
若是全局的,下面这样写会有问题的,后来登录的会把前一个登录的给覆盖掉
MDC.put("userId",userInfo.getLoginName());
MDC.put("userName",userInfo.getUserName());
------解决方案--------------------
MDC.put("userId",userInfo.getLoginName());
MDC.put("userName",userInfo.getUserName());
在这之前做一个判断,userInfo.getLoginName()和userInfo.getUserName()是否为null,为null的话就设定个特殊字符来记录下试试,如果这两个确定不为null那就不用这么做了
弄个源码跟进源码看下哪些地方导致了记录为Null
ps:没实际用过,只是提供参考