我需要在java中解析一个日志文件。日志文件包含有关呼叫事务的信息。我感兴趣的行以及其中的信息在日志行条目示例中以粗体标记。对于以下我需要提取的状态和电话号码:
Aug 15 20:35:22 GMT 2012 tropo109.orl.voxeo.net TROPO 138595 0 e467547d3333724bdd52635bbb713e77 1 d607eb64fb3bfbfd273a55f4b121b903 SimpleOutgoingCall[+17877058826/null->+17877260664/null] : [ TRANSFER ,* +17877260664 *]
从这条线上我需要获取电话号码和总通话时间。
Aug 15 20:35:22 GMT 2012 tropo109.orl.voxeo.net TROPO 138595 0 e467547d3333724bdd52635bbb713e77 1 d607eb64fb3bfbfd273a55f4b121b903 Logging CDR {"call":{"SipSessionID":"ss_jzto5yd4jruv","SessionID":"e467547d3333724bdd52635bbb713e77","CallID": "d607eb64fb3bfbfd273a55f4b121b903","ParentSessionID":"none","ParentCallID":"none","DateCreated":"2012 年 8 月 15 日星期三 20:34:14 +0000","DateUpdated":"2012 年 8 月 15 日星期三 20 :34:14 +0000","AccountID":"138595","Called": "+ 17877260664 ","Caller":"+17877058826","PhoneNumberSid":"unknown","Disposition":"脚本结束" ,“地位”:”成功","开始时间":"2012 年 8 月 15 日星期三 20:34:14 +0000","结束时间":"2012 年 8 月 15 日星期三 20:35:22 +0000","持续时间":" 67950","Flags":"out","RecordingDuration":"0","Network":"SIP","Channel":"VOICE","ApplicationId":"392671","ApplicationType":"groovy", "ServiceId":"1291899","StartUrl":"http://hosting.tropo.com/138595/www/outboud-web2ivr.groovy","BrowserIP":"10.6.69.109","PPID":"461 "}}
所以一般来说,我需要解析一个文件,并在不同的日志行条目中获取呼叫状态和持续时间。任何指针?
更新:我得到了获取第一部分的代码,关于如何获取第二部分的任何指针,并且只有一个编译表达式可以在日志条目行中找到 (phone,status) 或 (phone,callduration)?:
private static void matchParts( String aText ){
Pattern pattern = Pattern.compile("(?:\\[(\\w(\\w)*),(\\+\\d{11})\\])");
Matcher matcher = pattern.matcher(aText );
String phone;
String status;
while (matcher.find()) {
System.out.println("phone:" +matcher.group(3) + ", status: "+matcher.group(1) );
}
}