一个功能强大的命令行日志分析工具,支持多种过滤、统计和分析功能,专为处理大日志文件而设计。
- 高效文件处理:从文件或标准输入读取日志,支持反向读取大文件
- 多时间格式支持:自动检测常见时间格式,也支持用户指定格式
- 灵活的时间范围过滤:支持相对时间(分钟)和绝对时间(开始/结束时间)
- 关键词和正则表达式过滤:快速定位特定内容
- 日志级别过滤:按 INFO、WARN、ERROR、DEBUG、FATAL、TRACE 等级别过滤
- 统计功能:分析日志级别分布和时间区间分布
- 多种输出格式:支持 text、json、csv 格式
- 排序功能:按时间或日志级别排序
- 字段提取:提取 IP 地址、用户 ID、URL 和错误代码等字段
- 内存优化:使用固定大小的环形缓冲区处理大文件,避免内存溢出
- 测试模式:验证时间范围过滤功能
- Go 1.16 或更高版本
go build -o tac.exe main.go./tac.exe [选项] [文件路径]| 选项 | 描述 | 默认值 |
|---|---|---|
-m |
指定要显示的最近分钟数 | 0 |
-f |
日志文件路径(默认从标准输入读取) | "" |
-t |
指定时间格式(默认自动检测) | "" |
-k |
要搜索的关键词 | "" |
-r |
要搜索的正则表达式 | "" |
-s |
开始时间(格式:2006-01-02 15:04:05) | "" |
-e |
结束时间(格式:2006-01-02 15:04:05) | "" |
-l |
日志级别过滤(如 INFO、WARN、ERROR、DEBUG、FATAL、TRACE) | "" |
-c |
启用统计模式 | false |
-o |
输出格式(text、json、csv) | "text" |
-sort |
排序字段(time、level) | "" |
-extract |
提取特定字段(ip、user、url、error) | "" |
-test |
测试模式,验证时间范围过滤 | false |
# 从标准输入读取,显示最近 5 分钟的日志
echo "2023-01-01 12:00:00 INFO This is a test" | ./tac.exe -m 5
# 从文件读取日志
./tac.exe -f log.txt -m 10# 按关键词过滤
./tac.exe -f log.txt -k "error"
# 按正则表达式过滤
./tac.exe -f log.txt -r "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
# 按日志级别过滤
./tac.exe -f log.txt -l "ERROR"
# 组合过滤
./tac.exe -f log.txt -k "user" -l "INFO"# 显示最近 30 分钟的日志
./tac.exe -f log.txt -m 30
# 显示特定时间范围内的日志
./tac.exe -f log.txt -s "2023-01-01 00:00:00" -e "2023-01-02 23:59:59"
# 测试时间范围过滤
./tac.exe -f log.txt -m 10 -test# 统计日志级别分布和时间分布
./tac.exe -f log.txt -c
# 统计特定关键词的日志
./tac.exe -f log.txt -k "error" -c# 输出为 JSON 格式
./tac.exe -f log.txt -o json
# 输出为 CSV 格式
./tac.exe -f log.txt -o csv# 按时间排序(从旧到新)
./tac.exe -f log.txt -sort time
# 按日志级别排序(FATAL > ERROR > WARN > INFO > DEBUG > TRACE > OTHER)
./tac.exe -f log.txt -sort level# 提取 IP 地址
./tac.exe -f log.txt -extract ip
# 提取用户 ID
./tac.exe -f log.txt -extract user
# 提取 URL
./tac.exe -f log.txt -extract url
# 提取错误代码
./tac.exe -f log.txt -extract error工具支持以下时间格式:
2006-01-02 15:04:05(默认)- RFC3339 (
2006-01-02T15:04:05Z07:00) - RFC3339Nano (
2006-01-02T15:04:05.999999999Z07:00) 2006/01/02 15:04:052006-01-02T15:04:052006-01-02T15:04:05Z
也可以使用 -t 参数指定自定义时间格式。
工具支持多种日志格式,只要包含时间戳即可:
2023-01-01 12:00:00 INFO This is an info message
2023-01-01 12:01:00 WARN This is a warning message
2023-01-01 12:02:00 ERROR This is an error message from 192.168.1.1
2023-01-01 12:03:00 DEBUG This is a debug message for user=john
2023-01-01 12:04:00 FATAL This is a fatal message
2023-01-01 12:05:00 TRACE This is a trace message
工具使用固定大小的环形缓冲区(默认 100,000 行)来限制内存使用,适合处理大日志文件。当超过最大行数时,会自动移除最旧的行。
对于文件输入,工具采用从文件末尾反向读取的方式,只加载符合时间范围的日志,进一步减少内存使用。
- 当使用
-m参数时,工具会从最后一行开始向上遍历,直到找到时间戳早于指定分钟数的行,然后停止 - 当使用
-s和-e参数时,工具会过滤出所有在指定时间范围内的日志 - 字段提取功能使用正则表达式匹配,可能无法覆盖所有格式的字段
- 统计模式下,工具会忽略无法解析时间戳的日志行
- 测试模式下,工具会显示当前时间、截止时间以及过滤后的日志行数
MIT