过滤日志文件

时间:2017-07-03 16:10:00

标签: java regex pattern-matching nunit

我有一个日志文件,它是Nunit Runner的日志输出

我想解析文件以提取数据;

以下是示例日志文件: Log File Contents

我想提取测试计数,通过和失败的测试

如何使用Regex获取数据。

我正在使用模式和扫描程序类来扫描数据。

这是我用来读取文件的示例函数 Function to Read File

更新:

我已使用以下代码提取测试结果,我想对此代码提出建议:

  public int FilterLogFile(File LogFile) {
    int TestCount = 0;
    try {


        String Line = "";
        BufferedReader br = new BufferedReader(new FileReader(LogFile));
        while ((Line = br.readLine()) != null) {
            Scanner scanner = new Scanner(Line);
            String line = scanner.findInLine(".*(Test Count:)\\s+\\d+\\D+\\s+.*(Passed:)\\s+\\d+\\D+\\s+.*(Failed:)\\s+\\d+");
            if (line != null) {
                System.out.println("Detected Line: " + line);
                TestCount = ExtractData(Line);
                break;
            } else {
                continue;
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }

    return TestCount;
}

 private int ExtractData(String strLine) {
    int Count = 0;
    try {

        String[] Data = strLine.split(",");
        for (String str : Data) {
            if (str.contains("Test Count:")) {
                int value = Integer.parseInt(str.replaceAll("[^0-9]", ""));
                Count = value;
                System.out.println(value);
                break;
            }
        }
    } catch (Exception ex) {
        ex.printStackTrace();
    }
    return Count;
}

我正在处理的示例日志是:

Log File Contents

1 个答案:

答案 0 :(得分:0)

我希望这对你有帮助,

使用此,

a = "[test run server,overall result: Failed, Test count:09, Passed: 14, Failed: 1, skipped: 16, start: 1, end: 10, asd: asd,akdsu]"

/Test.+.(?:Failed:.\d+)/ 

正则表达式:/Test.+.(?:Failed:.\d+)/