我正在尝试解析以下格式的日志:
for (Node menu : menuBarMain.lookupAll(".menu")) {
if (menu.contains(menu.screenToLocal(p))) {
f = true;
break;
}
}
它们是由在某个服务器上运行的线程池生成的,这些线程都写入单个文件,我需要从它们的块中提取信息,同时牢记以下约束:
事件是多行的,您看到的07/12/16 00:41:03.30 FABsrv.1:fwsrvExecServerRule:FwSelectRawSqlTxn stopped at 00:41:03 , and took 0.000413000
07/12/16 00:41:03.30 FABsrv.1:fwsrvExecServerRule:FwSelectRawSqlTxn started at 00:41:03
07/12/16 00:41:03.30 FABsrv.1:fwsrvExecServerRule:FwSelectRawSqlTxn stopped at 00:41:03 , and took 0.000450000
07/12/16 00:41:03.30 FABsrv.15:FwEventManager:message to process: :>>L FwSrvExecuteRuleTxn msgTag=_INBOX.0A121933.DC05784206C6061BD8.13 ruleName=C2_BATCHCHECK attributes={ { class=ASSOC { class=A1 "PARAMETER" } { class=A1 "VALUE" } } { "USERID" "BC212" } { "EQPID" "FAITU02" } { "LOTIDS" "Q619294" } { "LOTSPPIDS" "Q619294=B401HA/DEFFIN_A" } { "FORCENOMEASURE" "F" } { "FORCEBATCHMAX" "F" } { "TID" "CRO06666_RN004102950_V5.8.0.0004" } }
07/12/16 00:41:03.30 FABsrv.15:fwsrvExecServerRule:FwSelectRawSqlTxn started at 00:41:03
07/12/16 00:41:03.30 FABsrv.1:fwsrvExecServerRule:FwSelectRawSqlTxn started at 00:41:03
07/12/16 00:41:03.30 FABsrv.1:fwsrvExecServerRule:FwSelectRawSqlTxn stopped at 00:41:03 , and took 0.001052000
07/12/16 00:41:03.30 FABsrv.15:fwsrvExecServerRule:FwSelectRawSqlTxn stopped at 00:41:03 , and took 0.001576000
07/12/16 00:41:03.30 FABsrv.15:fwsrvExecServerRule:FwSelectRawSqlTxn started at 00:41:03
07/12/16 00:41:03.31 FABsrv.15:fwsrvExecServerRule:FwSelectRawSqlTxn stopped at 00:41:03 , and took 0.000910000
07/12/16 00:41:03.31 FABsrv.15:C2_BATCHCHECK:CAPITraceDiagnostic - finish executing rule C2_BATCHCHECK:Reply
和stopped
之间可以有行和需要连接在一起的行
事件交织在一起,第三列指定哪个线程写入哪一行,每个线程需要对应不同的数据流
我需要一个线程安全的解决方案
最后一点是真正的问题,因为当前正在使用的是started
过滤器及其multiline
选项,可根据线程编号拆分流,但该解决方案可以' t扩展到我们现在拥有的数据量,并且不推荐stream-identity
过滤器支持mutiline
这是线程安全的,但不支持该流拆分功能。
将日志分成多个文件将是我明显的解决方案,但由于操作原因,这是不可能的。
有没有办法做到这一点?