【问题标题】:Grep log4j for lines after certain timestamp in Java在 Java 中某个时间戳之后的行的 Grep log4j
【发布时间】:2016-07-29 15:09:18
【问题描述】:

我必须计算某个字符串在 log4j 文件中出现的次数。我有一个开始日期,我想在测试期间在 Java 类中开始 greping(可能是 sedawk?)。

即使我不知道从Runtime.getRuntime().exec(...) 命令捕获 grep 结果与读取和解析(通过正则表达式和字符串操作)当前 log4j 文件是否更好,我也不知道如何grep像这样的文件:

2016-07-29 15:13:08,725:  INFO [main] .....
2016-07-29 15:13:08,817:  INFO [main] ....
2016-07-29 15:13:08,901:  INFO [main] ...

但仅在 2016-07-29 15:13:08,818 之后

提前致谢!

【问题讨论】:

    标签: java bash sed grep log4j


    【解决方案1】:

    如果您有一个完全匹配的要从中划分输出的匹配项,根据another question here,您可以使用 sed 仅输出该时间戳之后的行。找到要打破的精确匹配可能意味着逐步使您的时间戳更宽松,例如删除最后一个字符,直到你得到一个匹配/匹配,然后解析这些匹配以确定哪个是之后的第一个。

    如果您想在 bash 中执行此操作,请考虑 this question;专门将日期转换为 unix 时间戳,然后比较结果值。其余的应该是直截了当的;同样在 Java 中,提取日期并比较它们应该不会太具有挑战性。除非您有足够的学习经验,否则请使用您更熟悉的语言。

    【讨论】:

    • 谢谢@Danikov,但我刚刚发现我有一个可以使用的mytoken,所以我可以在文件最后一次出现后将其一分为二。之后,我可以在我的 java 程序中提供输出而不会弄乱日期。最终,那里必须进行一些字符串处理。不过,我会接受您的回答,因为您指出了 sedgrep 的优秀资源
    • 实际上,我完全按照stackoverflow.com/a/5935779/1983647 所示的方式进行操作,但将tail -r 替换为tac
    猜你喜欢
    • 2015-08-01
    • 1970-01-01
    • 2011-09-04
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多