Skip to content

encodery/tac

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 

Repository files navigation

tac - 日志分析工具

一个功能强大的命令行日志分析工具,支持多种过滤、统计和分析功能,专为处理大日志文件而设计。

功能特性

  • 高效文件处理:从文件或标准输入读取日志,支持反向读取大文件
  • 多时间格式支持:自动检测常见时间格式,也支持用户指定格式
  • 灵活的时间范围过滤:支持相对时间(分钟)和绝对时间(开始/结束时间)
  • 关键词和正则表达式过滤:快速定位特定内容
  • 日志级别过滤:按 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:05
  • 2006-01-02T15:04:05
  • 2006-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

About

一个功能强大的命令行日志分析工具,支持多种过滤、统计和分析功能,专为处理大日志文件而设计。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages