正在解析 Java 服务器异常日志
Parsing Java Server Exception logs
我有一个要求,其中我必须从 WebSphere 服务器读取所有 "history" 异常日志并将它们加载到 Hive 中。
下面是典型日志的样子,但消息行有时也会扩展 4-5 行。我并不真正关心堆栈跟踪,但绝对需要时间戳、ThereadId、简称、事件类型和它们各自列中的完整错误消息。
[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)
我尝试通过一次读取一行并使用 Regex 进行解析来做到这一点 - 但失败得很惨(只有 20% 的数据符合 Regex)并且质量也很差。我真的不知道要在这里继续,也不知道要选择什么分隔符来将该异常字符串分解为列(\t 已经尝试过 - 也不起作用。)
这里有任何帮助或指向正确方向的指示吗?
我有一个要求,其中我必须从 WebSphere 服务器读取所有 "history" 异常日志并将它们加载到 Hive 中。 下面是典型日志的样子,但消息行有时也会扩展 4-5 行。我并不真正关心堆栈跟踪,但绝对需要时间戳、ThereadId、简称、事件类型和它们各自列中的完整错误消息。
[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)
我尝试通过一次读取一行并使用 Regex 进行解析来做到这一点 - 但失败得很惨(只有 20% 的数据符合 Regex)并且质量也很差。我真的不知道要在这里继续,也不知道要选择什么分隔符来将该异常字符串分解为列(\t 已经尝试过 - 也不起作用。)
这里有任何帮助或指向正确方向的指示吗?