[英]java regular expression for parsing log file
我正在尝试解析日志文件,并且想从输入的行中提取参数。 这是该行的示例:
"Apr 8 07:13:10 kali gnome-screensaver-dialog: gkr-pam: unlocked login keyring"
该程序给我:
Date&Time: Apr 11 00:06:30
Hostname: kali
Program Name: gnome-screensaver-dialog
Log: gkr-pam: unlocked login keyring
但对于这一行:
"Apr 8 07:13:45 kali gnome-screensaver-dialog: pam_unix(gnome-screensaver:auth): authentication failure; logname= uid=0 euid=0 tty=:0.0 ruser= rhost= user=root"
我有一个来自Java的错误。 错误是我的代码中的“ Regular Expression not matching
”,表明我的注册是虚假的。 基本上,我想提取日期和时间,主机名,程序名和日志消息问题在于提取程序名,这是第一个冒号之前的第一件事,例如上面的那一行应该给我:
Date&Time: Apr 8 07:13:45
Hostname: kali
Program Name: gnome-screensaver-dialog
Log: pam_unix(gnome-screensaver:auth): authentication failure; logname= uid=0 euid=0 tty=:0.0 ruser= rhost= user=root
这是我的部分Java代码:
private class FileTailerListenerAdapter extends TailerListenerAdapter {
@Override
public void handle(String line) {
String logEntryPattern = "([\\w]+\\s[\\d]+\\s[\\d:]+) ([\\w]+) ([\\[\\]\\(\\)a-zA-Z0-9\\-]+)[?:] (.+)";
Pattern p = Pattern.compile(logEntryPattern);
Matcher matcher = p.matcher(line);
if (!matcher.matches()) {
System.err.println("Regular Expression not matching:");
System.err.println(line);
return;
}
System.out.println("Total groups: " + matcher.groupCount());
System.out.println("Date&Time: " + matcher.group(1));
System.out.println("Hostname: " + matcher.group(2));
System.out.println("Program Name: " + matcher.group(3));
System.out.println("Log: " + matcher.group(4));
System.out.println();
System.out.println();
}
}
任何帮助将不胜感激!
主机名和程序名似乎不能包含空格-知道您可以大大简化正则表达式:使用空格字符分隔主机名,程序名和日志消息-一切正常:
final String logEntryPattern = "(\\w+\\s+\\d+\\s+\\d{2}:\\d{2}:\\d{2})\\s+(\\S+)\\s+(\\S+):\\s+(.+)";
final Pattern p = Pattern.compile(logEntryPattern);
final Matcher matcher = p.matcher(line);
if (!matcher.matches()) {
System.err.println("Regular Expression not matching:");
System.err.println(line);
return;
}
System.out.println("Total groups: " + matcher.groupCount());
System.out.println("Date&Time: " + matcher.group(1));
System.out.println("Hostname: " + matcher.group(2));
System.out.println("Program Name: " + matcher.group(3));
System.out.println("Log: " + matcher.group(4));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.