我有一个需求,需要从WebSphere服务器读取所有“历史”异常日志并将它们加载到Hive中。 下面是一个典型的日志样例,但消息行有时也会延长4-5行。 我不太关心堆栈跟踪,但绝对需要时间戳,线程ID,短名称,事件类型和完整的错误消息分别在它们各自的列中。
[5/20/16 22:35:39:841 CDT] 00233723 SystemOut O 22:35:39,840 ERROR [com.xxx.app.yyy.hms.jms.receivers.impl.B2bTonnn278InReceiverImpl]
xxxRuntimeException{errorVO=com.xxx.app.yyy.nnn.mmm.data.mmmCompleteIntakeErrorVO(diagnosesMessagesExist:false, mmmMessagesExist:false, incrementedKey:null, numPagesWithMessages:1, primaryKeyFields:[], providersMessagesExist:false, requiredFields:[], servicesMessagesExist:true, changeDateTime:05-20-2016 10:35:39:840 PM CDT, changeUserID:SYSTEM, createDateTime:null, createUserID:null, dataSecured:false, dataSecurityTypeList:null, globalMessages:[], historyID:0, messages:{procedureUnitCount=[Field For Label: procedureUnitCount Message ID: 'ERR0010', Message Arguments: '[]']}, trackChanges:false, updateVersion:-1, messages={procedureUnitCount=[Field For Label: procedureUnitCount Message ID: 'ERR0010', Message Arguments: '[]']})}
at com.xxx.app.yyy.nnn.mmm.businesslogic.impl.mmmImpl.completemmm(mmmImpl.groovy:612)
at sun.reflect.GeneratedMethodAccessor4988.invoke(Unknown Source)
我试过逐行阅读并使用正则表达式进行解析,但结果十分糟糕(只有20%的数据符合正则表达式),而且质量很差。我真的不知道该怎么继续下去,也不知道选择什么分隔符来将异常字符串分成列(已尝试\t,但也不起作用)。请问有什么帮助或指向正确方向的建议吗?