读书人

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

发布时间: 2012-02-08 19:52:21 作者: rapoo

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:没实际用过,只是提供参考

读书人网 >J2EE开发

热点推荐