我使用log4j将日志输出到MongoDB数据库,我想使用MDC将一个map输出到Json字符串中。
日志中map的样式是{CODE1=00022, CODE=0002}
这不符合json规范,会报错
我就重写的map的toString()方法,输出{"CODE1"="00022", "CODE"="0002"}
但是写入数据库的时候,MongoDB会将字符串中的转义字符也显示出来,{\"CODE1\"=\"00022\", \"CODE\"=\"0002\"}如:。还是会有JSONParseException
有什么解决办法吗?
我的目的就是将map以{"CODE1"="00022", "CODE"="0002"}样式放到MongoDB一条文档的子文档中。如{ 
  "_id" : { "$oid" : "4e126e6a8afbc8dd60f92768"} , 
  "LOGTIME" : "2011-07-05 09:52:42" , 
  "LOGLEVEL" : "INFO" , 
  "LOGTYPE" : {"CODE1"="00022", "CODE"="0002"} , ←←此处
  "CLASSNAME" : "test.LogTest" , 
  "METHODNAME" : "main" , 
  "PATH" : "test.LogTest.main(LogTest.java:49)" , 
  "MESSAGE" : "java.lang.IndexOutOfBoundsException: Index: 4, Size: 0\r\n\tat java.util.ArrayList.RangeCheck(ArrayList.java:547)\r\n\tat java.util.ArrayList.get(ArrayList.java:322)\r\n\tat test.LogTest.main(LogTest.java:44)\r\n"
}

解决方案 »

  1.   

    我犯了个错误,json中应该用:而不是=
    这样只要将map中的toString方法改一下就实现了。
    map 的toString 得到如下格式{'CODE1':'00022', 'CODE':'0002'}
    写入数据库后就是{ "_id" : { "$oid" : "4e1296b08afb62efeb02876c"} , "LOGTIME" : "2011-07-05 12:44:32" , "LOGLEVEL" : "INFO" , 
    "LOGTYPE" : { "1" : "11" , "CODE1" : "00022" , "CODE" : "0002" , "xx" : "ssdfjd"} , ←←这里
    "CLASSNAME" : "test.LogTest" , "METHODNAME" : "main" , "PATH" : "test.LogTest.main(LogTest.java:49)" , "MESSAGE" : "java.lang.IndexOutOfBoundsException: Index: 4, Size: 0\r\n\tat java.util.ArrayList.RangeCheck(ArrayList.java:547)\r\n\tat java.util.ArrayList.get(ArrayList.java:322)\r\n\tat test.LogTest.main(LogTest.java:44)\r\n"}
    虽能对日志记录提点建议分就给谁了,我菜鸟
      

  2.   

    请求log4j中info(Object message, Throwable t)传入的异常t是干什么的。