具体配置如下:<appender   name= "access_Log_JDBC"   class= "org.apache.log4j.jdbc.JDBCAppender">
          <param   name= "Driver"   value= "oracle.jdbc.driver.OracleDriver"   />
          <param   name= "URL"   value= "jdbc:oracle:thin:@XXX.XXX.XXX.XXX:1521:oradb"   />
          <param   name= "user"   value= "XXX"   />
          <param   name= "password"   value= "XXX"   />
          <param   name= "sql"   value= "INSERT   INTO   SSI_USER_LOG(OPERATE_TIME,USER_NAME,OPERATE_OBJECT,OPERATE_INFO)   VALUES   (%d,%X{name},%X{b},'%m')"/>
          <param   name= "BufferSize"   value= "1"   />
    </appender> 
调用方式:
  String   msg  =   "b03";
  String   name  =   "u03";
 String   b  =   "b03 "; 
 MDC.put("user", name); 
 MDC.put( "b", b);     //和配置文件中的%X{b}对应
 System.out.println(MDC.get("user"));
 SSILogger.accesslog_category.info(msg);   //和配置文件中的%m对应 但是执行后控制台回报 :
    log4j:ERROR Failed to excute sql
java.sql.SQLException: ORA-00917: 缺失逗号
原因已经知道是 %X{name}和%X{b}的问题,但是就是不知道怎么解决,求高手指点,
能不能告诉下,是否可以吧log4j执行插入的语句完整的打印出来呢,求指点

解决方案 »

  1.   

    %X{name},%X{b}这什么表达方式??
      

  2.   


    转义,把MDC中的东西读取出来
      

  3.   

    我记得如果ORACLE语句如果执行出错,会有相应的日志会记录这条语句,去查一下实际执行错误的SQL语句应该可以发现点问题
      

  4.   


    你说的oracle日志还是别的
      

  5.   

    '%X{name}','%X{b}'
    这样你试过?不行?
      

  6.   

    %X{name},%X{b}
    换成
    {name},{b}
      

  7.   

    VALUES (%d,%X{name},%X{b},'%m')"有空格?
      

  8.   

    谢谢楼上各位,问题应经解决了是 %d的问题,跟别的无关,左后处理就是调用oracle系统函数
      

  9.   

    楼主 麻烦告知下原因啊,我也是这种错误,烦躁啊,搞了好长时间了。。
    log4j:ERROR Failed to excute sql
    java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ''' not found.
    我的配置文件如下:
    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
      

  10.   

    # This is the configuring for logging displayed in the Application Server
    # log4j.rootCategory=INFO, stdout# Replace the line above if you want to put a log file into the directory
    # you start your server fromlog4j.rootLogger=info, DATABASE
    log4j.addivity.org.apache=true########################
    # JDBC Appender
    #######################log4j.appender.DATABASE.Threshold=WARNlog4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppenderlog4j.appender.DATABASE.BufferSize=10log4j.appender.DATABASE.URL=jdbc\:oracle\:thin\:@localhost\:1521\:aaalog4j.appender.DATABASE.driver=oracle.jdbc.driver.OracleDriverlog4j.appender.DATABASE.user=aaalog4j.appender.DATABASE.password=123456log4j.appender.DATABASE.sql=INSERT INTO FLBMXT_LOG(LOG_DATE,LOG_USERID,LOG_THREAD,LOG_LEVEL,LOG_CLASS_METHOD,LOG_MESSAGES,LOG_ID)VALUES ('%d{yyyy-MM-dd HH:mm:ss}','%X{user_id}','%t','%p','%l','%m',1)log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout这是我的log4j.properties配置文件
    然后我数据库的LOG_DATE是varchar类型
    然后我就报你上面的错:java.sql.SQLException: ORA-00917: 缺失逗号
    跪求解决