繁体   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