当前位置: 代码迷 >> J2EE >> log4j诡异有关问题:用户名时能输出,时而不能输出
  详细解决方案

log4j诡异有关问题:用户名时能输出,时而不能输出

热度:143   发布时间:2016-04-22 02:50:57.0
log4j诡异问题:用户名时能输出,时而不能输出!
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:没实际用过,只是提供参考