我需要用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":"Wed, 15 Aug 2012 20:34:14 +0000","DateUpdated":"Wed, 15 Aug 2012 20:34:14 +0000","AccountID":"138595","Called":"+17877260664","Caller":"+17877058826","PhoneNumberSid":"unknown","Disposition":"Script ended","Status":"Success","StartTime":"Wed, 15 Aug 2012 20:34:14 +0000","EndTime":"Wed, 15 Aug 2012 20:35:22 +0000","Duration":"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"}}
因此,一般来说,我需要解析文件并在不同的日志行条目中获取调用状态和持续时间。有什么指点吗?
更新: 我得到了获取第一部分的代码,任何关于如何获取第二部分的指针,并且只有一个编译表达式,可以在日志输入行中找到(电话,状态)或(电话,通话持续时间)?:
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) );
}
}
最佳答案
对于第一个:
private static void matchParts(String line){
Pattern pattern = Pattern.compile(": \\[(\\w+),\\*(\\+\\d{11})\\*]");
Matcher matcher = pattern.matcher(line);
String phone;
String status;
while (matcher.find()) {
System.out.println("phone:" +matcher.group(2) + ", status: "+matcher.group(1) );
}
}
对于第二个:
private static void matchParts(String line){
Pattern pattern = Pattern.compile("Called\":\"(\\+\\d{11}).*\"Duration\":\"(\\d+)");
Matcher matcher = pattern.matcher(line);
String phone;
String status;
while (matcher.find()) {
System.out.println("phone:" +matcher.group(1) + ", duration: "+matcher.group(2) );
}
}
我使用这个非常方便的工具:http://www.regexplanet.com/advanced/java/index.html当涉及到查找正则表达式时。
编辑: 如果您正在寻找 1 个正则表达式,它可能是这样的:
Pattern.compile("\\[(\\w+),\\*(\\+\\d{11})\\*].*?Called\":\"(\\+\\d{11}).*?\"Duration\":\"(\\d+)", Pattern.MULTILINE);
关于java - 这将是解析以下日志文件的 java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12041518/