log4j配置文件:
log4j.rootLogger=warn,db
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.db.BufferSize=1
log4j.appender.db.URL=jdbc\:jtds\:sqlserver\://server\:1434/pcbsyn
log4j.appender.db.driver=net.sourceforge.jtds.jdbc.Driver
log4j.appender.db.user=sa
log4j.appender.db.password=711
log4j.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 存入
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值!
如图:

解决方案 »

  1.   

    session.setAttribute("userId", userInfo.getLoginName().toString().trim());
    session.setAttribute("userName", userInfo.getUserName().toString().trim());
    MDC.put("userId",userInfo.getLoginName());  
    MDC.put("userName",userInfo.getUserName()); 
    这些代码是只有一处,还是有多处
    建议将涉及到同样操作的语句的地方都搂出来检查检查
      

  2.   

    还需要什么信息啊?private  Logger logger = Logger.getLogger(this.getClass());  
    logger.warn("查询企业信息成功!企业编号:"+enterprise.getEno());
    action中 调用~
      

  3.   

    这个代码是在用户登陆的action中的
    只有一处~ 调用信息见楼上 谢谢~
      

  4.   

    MDC是全局的吗,是一个Map吗
    若是全局的,下面这样写会有问题的,后来登录的会把前一个登录的给覆盖掉
    MDC.put("userId",userInfo.getLoginName());   
    MDC.put("userName",userInfo.getUserName());  
      

  5.   

    我只是引用了一个
    import org.apache.log4j.MDC;
    然后下面就直接MDC.put了~其他任何页面都没涉及到这个呢。
      

  6.   

    MDC.put("userId",userInfo.getLoginName());  
    MDC.put("userName",userInfo.getUserName()); 
    在这之前做一个判断,userInfo.getLoginName()和userInfo.getUserName()是否为null,为null的话就设定个特殊字符来记录下试试,如果这两个确定不为null那就不用这么做了
    弄个源码跟进源码看下哪些地方导致了记录为Null
    ps:没实际用过,只是提供参考
      

  7.   

    已经解决。
    是session的问题,。