[英]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.