java截取JSON报文的方法
来源:互联网 发布:17173剑三捏脸数据站 编辑:程序博客网 时间:2024/06/02 06:44
需求:由于操作日志当中error message里面的错误报文信息过多,存入数据库会占用较大的空间(通常有3-5KB),长此以往,不是办法。在暂时不考虑定时任务清理的情况下,errorMsg以外的信息又足够满足记录操作日志的目的,所以截取报文当中的trace字段刻不容缓
例如
{ "homepageUrl":"null", "id":"null", "retCode":"-9999", "retMessage":"Data truncation: Data too long for column 'domain_name' at row 1", "trace":"java.lang.Exception: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'domain_name' at row 1com.xxxxxx.pxgxfrxmx.srv.OSDIInvoker.invoke(OSDIInvoker.java:56)com.xxxxxx.tools.osdi.OSDI.invoke(OSDI.java:383)com.xxxxxx.pxgxfrxmx.srv.channel.InvokeService.doTask(InvokeService.java:62)sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xxxxxx.tools.sermgr.ServiceManager.doTask(ServiceManager.java:90)com.xxxxxx.pxgxfrxmx.srv.channel.RequestSubChannel.doTask(RequestSubChannel.java:45)sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xxxxxx.tools.sermgr.ServiceManager.doTask(ServiceManager.java:90)com.xxxxxx.pxgxfrxmx.ControlFilter.process(ControlFilter.java:152)com.xxxxxx.pxgxfrxmx.ControlFilter.doFilter(ControlFilter.java:106)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.lang.Thread.run(Thread.java:745)com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3556)com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)com.mysql.jdbc.ServerPreparedStatement.serverExecute(ServerPreparedStatement.java:1333)com.mysql.jdbc.ServerPreparedStatement.executeInternal(ServerPreparedStatement.java:843)com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1356)org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)org.apache.commons.dbcp.DelegatingPreparedStatement.execute(DelegatingPreparedStatement.java:172)com.xx.xxxframe2.complex.datasource.LogicPreparedStatement.execute(LogicPreparedStatement.java:342)com.xx.xxxframe2.bo.DataStoreImpl.insert(DataStoreImpl.java:430)com.xx.xxxframe2.bo.DataStoreImpl.save(DataStoreImpl.java:723)com.xx.xxxframe2.complex.tab.store.AdvanceDataStoreImpl.save(AdvanceDataStoreImpl.java:42)com.xxxxxx.acp.kdomain.bo.BOAIAcpDomain4CDEngine.save(BOAIAcpDomain4CDEngine.java:136)com.xxxxxx.acp.kdomain.bo.BOAIAcpDomain4CDEngine.save(BOAIAcpDomain4CDEngine.java:279)com.xxxxxx.acp.kdomain.dao.impl.Domain4CDDAOImpl.saveDomain(Domain4CDDAOImpl.java:131)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xx.xxxframe2.complex.service.proxy.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:129)com.sun.proxy.$Proxy77.saveDomain(Unknown Source)com.xxxxxx.acp.kdomain.service.impl.Domain4CDSVImpl.saveDomain(Domain4CDSVImpl.java:54)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xx.xxxframe2.complex.service.proxy.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:129)com.sun.proxy.$Proxy78.saveDomain(Unknown Source)sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xxxxxx.pxgxfrxmx.srv.OSDIInvoker.invoke(OSDIInvoker.java:27)com.xxxxxx.tools.osdi.OSDI.invoke(OSDI.java:383)com.xxxxxx.pxgxfrxmx.srv.channel.InvokeService.doTask(InvokeService.java:62)sun.reflect.GeneratedMethodAccessor281.invoke(Unknown Source)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xxxxxx.tools.sermgr.ServiceManager.doTask(ServiceManager.java:90)com.xxxxxx.pxgxfrxmx.srv.channel.RequestSubChannel.doTask(RequestSubChannel.java:45)sun.reflect.GeneratedMethodAccessor43.invoke(Unknown Source)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)java.lang.reflect.Method.invoke(Method.java:498)com.xxxxxx.tools.sermgr.ServiceManager.doTask(ServiceManager.java:90)com.xxxxxx.pxgxfrxmx.ControlFilter.process(ControlFilter.java:152)com.xxxxxx.pxgxfrxmx.ControlFilter.doFilter(ControlFilter.java:106)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436)org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078)org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)java.lang.Thread.run(Thread.java:745)", "userMsg":"null"}
怎么样,很长吧。。。现在我们用如下代码,来处理一下
package regexExperiment;import java.util.StringTokenizer;import lazyJoe.JoePrint;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;public class regexAttFive { public static void main(String[] args) { JSONObject jsonObject = JSON.parseObject(getErrorMsg()); String trace = jsonObject.getString("trace"); // split trace according to "\n" while splitter itself contained StringTokenizer tokenizer = new StringTokenizer(trace, "\n", true); int count = 0; StringBuilder builder = new StringBuilder(); // first 3 lines of error message was required, while adding 3 splitters making count 6 while (tokenizer.hasMoreTokens() && count < 6) { builder.append(tokenizer.nextToken()); count++; } jsonObject.put("trace", builder.toString()); JoePrint.print(JSON.toJSONString(jsonObject)); }}
得到如下报文
{ "homepageUrl":"null", "id":"null", "retCode":"-9999", "retMessage":"Data truncation: Data too long for column 'domain_name' at row 1", "trace":"java.lang.Exception: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'domain_name' at row 1com.xxxxxx.pxgxfrxmx.srv.OSDIInvoker.invoke(OSDIInvoker.java:56)com.xxxxxx.tools.osdi.OSDI.invoke(OSDI.java:383)", "userMsg":"null"}
至于为何使用StringTokenizer,我是参考了文章java中subString、split、stringTokenizer三种截取字符串方法的性能比较,毕竟勿以善小而不为,性能至上,养成好习惯。。。但是话说回来,文章内容我也没有加以认证,权当尝试
阅读全文
0 0
- java截取JSON报文的方法
- java 字符串截取的方法
- 关于java实体在xml报文和json报文之间的相互转换
- 关于Java集成json,返回json报文
- IP报文的截取与分析
- 用java截取字符串长度的方法
- Java split 截取反斜杠的方法
- 使用Java截取字符串的方法
- java中常用的字符串截取方法
- Java中截取定长字符串的方法
- Java截取字符串的方法substring
- Java截取字符串的三种方法
- JAVA 截取字符串的三种方法
- java 正则表达式截取 json 对象的键值
- 组装json格式报文 -- java内部类
- java socket报文通信-报文的封装
- 字符串截取方法java
- java字符串截取方法
- 机器学习PAI通过声音分辨男女(含语音特征提取相关数据和代码)
- 第一个树莓派驱动程序-helloword(五)
- (4). hdfs数据写过程概述
- CCN-lite的安装及场景实现
- 《高性能SQL调优精要与案例解析》一书谈主流关系库SQL调优(优化&TUNING)技术精髓之——执行计划获取及理解
- java截取JSON报文的方法
- list转String的几种方法
- QT 快捷键
- Elasticsearch.5.4.1+kibana5.4.1+IK分词集群搭建
- 如何开始使用 Java 机器学习
- 大数据早报:阿里巴巴升级操作系统战略 谷歌医疗广告竞价黑幕(9.28)
- 大数据早报:微软宣布推出新Azure机器学习工具 这个机器人可以像人类一样自然地行走(9.27)
- Failed to set the 'value' property on 'HTMLInputElement': This input element解决办法
- 【边拆边聊14G】Purley平台的超强演绎!