gpt4 book ai didi

java - Java使用模板引擎解析多行日志文件

转载 作者:行者123 更新时间:2023-11-30 10:46:21 24 4
gpt4 key购买 nike

我想简化我的日志文件解析器并用模板引擎替换复杂的正则表达式。这个想法是反转模板引擎的过程,并将模板描述和有效结果文件作为输入。多行日志文件如下所示:

*** ID: X821 ***
- type: B5
- time-stamp: 20160202T01:11:01.2991

* Device: XKK-255141

它们都具有相同的结构,可以用伪模板语言描述:

*** ID: {{string}} ***
- type: {{string}}
- time-stamp: {{date}}

* Device: XKK-{{integer}}

是否有一个模板引擎可以解析日志文件,在模板文件中查找结构并返回 HashMap/List/Object 中的内容?

注意:我知道我可以在 ANTLR 中编写一个简单的 DSL。但这里的想法是简化解析并接受仅支持不带递归的基本多行日志文件。

最佳答案

我不知道现有的模板引擎可以执行此操作(它们通常以相反的方式工作,用数据填充模板)。

为什么不使用这样的东西:

class ReverseTemplateEngine {
ArrayList<String> prefixes = new ArrayList();
ArrayList<String> suffixes = new ArrayList();

public ReverseTemplateEngine(String... templates) {
for (String s: templates) {
int cut = s.indexOf("$");
suffixes.add(s.substring(0, cut));
prefixes.add(s.substring(cut + 1);
}
}

public List<String> parse(BufferedReader r) {
ArrayList<String> result = new ArrayList<>();
while (true) {
String line = reader.readLine();
for (int i = 0; i < prefixes.length; i++) {
if (line.startsWith(prefixes.get(i))
&& line.endsWith(suffixes.get(i)) {
result.add(line.substring(prefixes.get(i).length(),
line.length() - suffixes.get(i).length()));
break;
}
}
}
return list;
}
}

用法:

ReverseTemplateEngine rte = new ReverseTemplateEngine(
"*** ID: $ ***",
"- type: $",
"- time-stamp: $",
"* Device: XKK-$");

List<String> result = rte.parse(new BufferedReader(
new FileReader("yourfile.txt")));

关于java - Java使用模板引擎解析多行日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36586199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com