2 个版本

0.1.1 2019 年 12 月 15 日
0.1.0 2019 年 2 月 3 日

#1444文件系统

GPL-2.0 许可证

27KB
531

trufflehunter

日志文件搜索工具

USAGE:
    hun [FLAGS] [OPTIONS] [ARGS]

FLAGS:
    -h, --help         Prints help information
        --long-help    Long help information explaining formats and time expressions
    -V, --version      Prints version information
        --verbose      Provide the precise time range and line numbers

OPTIONS:
    -e, --end-line <n>      The last line to search to
    -f, --format <rx>       The time stamp format
    -s, --start-line <n>    The first line to search from

ARGS:
    <LOG>        The log file to search in
    <WHEN>...    The period of time to search for events in

Trufflehunter (hun) 是一个用于快速从指定时间范围内提取日志文件中行的工具。它所需的参数是日志文件名和时间表达式。

示例

> hun log.txt from 3 am today until 3:15
2019-01-12 3:00:01 -- tomorrow and tomorrow and tomorrow
sometimes there's garbage between timestamps
2019-01-12 3:05:13 -- creeps in this petty pace from day to day
2019-01-12 3:06:00 -- to the last syllable of recorded time
[exit stage left pursued by bear]
2019-01-12 3:10:23 -- and all our yesterdays have lighted fools
2019-01-12 3:14:59 -- the way to dusty death

> hun --verbose log.txt from 3 am today until 3:06
lines 12345 - 12349
2019-01-12 3:00:01 -- tomorrow and tomorrow and tomorrow
sometimes there's garbage between timestamps
2019-01-12 3:05:13 -- creeps in this petty pace from day to day
2019-01-12 3:06:00 -- to the last syllable of recorded time
[exit stage left pursued by bear]

时间表达式

Trufflehunter 使用 two_timer crate 解析时间表达式。它能理解的时间表达式的范围很难一一列举。通常,它们符合以下模式之一

<time>
from <time a> to <time b>
<period> around/before/after <time>

two_timer 解析器旨在模拟英语时间表达式的语义。您可以尝试看看它将接受什么。如果有疑问,具体一些不会有害。例如:

5 minutes before and after 3:13:45 PM on June 5, 1910

时间戳格式

时间戳格式必须是一个可以编译成正则表达式并具有“年”、“月”、“日”、“分钟”、“小时”和“秒”等命名捕获组的字符串。不需要命名捕获,但没有捕获的格式在查找时间戳时不会做得很好。请注意,在 Rust 正则表达式中不能重用命名捕获名称。表达式

(?<foo>f) (?<bar>b) | (?<bar>b) (?<foo>f)

是不合法的。

默认格式是

(?:[^\d'"`>]|^)(?P<year>[0-9]{4})\D{1,2}(?P<month>[0-9]{1,2})\D{1,2}(?P<day>[0-9]{1,2})\D{1,2}(?P<hour>[0-9]{1,2})\D{1,2}(?P<minute>[0-9]{1,2})\D{1,2}(?P<second>[0-9]{1,2})(?:[^\d'"`<]|$)

这是为了匹配大多数日志时间戳,而不匹配日志中 SQL 或 JSON 或 XML 等数据序列化语言中的引号时间戳。

显然,在命令行上键入这些内容相当多。通常,默认模式将匹配日志文件的日期。

如果某一行没有时间戳,则将其视为与之前带有时间戳的最接近的行具有相同的时间戳。

起始行和结束行

–start-line 和 –end-line 选项允许您在日志行顺序错误或时间格式失败的情况下进行操作。如果 Trufflehunter 因为遇到顺序错误或“顺序错误”的行而错误,您可能可以通过指定要搜索的行的子范围来绕过这些粗糙的部分。

名称

Trufflehunter 猎取的是日志中期望的时段。Trufflehunter 也是《纳尼亚传奇》中一只会说话的獾的名字。

依赖关系

~4.5–6.5MB
~114K SLoC