簡體   English   中英

用於解析日志文件的Java正則表達式

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM