golang日志查看与过滤工具插件库lazyjournal的使用
Golang日志查看与过滤工具插件库lazyjournal的使用
简介
lazyjournal是一个用于从journald、auditd、文件系统、Docker容器、Podman和Kubernetes pods读取日志的终端用户界面工具,支持快速查看、彩色输出和多种过滤方式(包括模糊查找、正则表达式和时间戳过滤)。它使用Go语言编写,基于awesome-gocui库。
主要功能
- 简单安装,只需下载一个可执行文件
- 集中搜索日志源
- 实时输出新事件(类似tail)
- 查看systemd所有单元(服务、套接字等)及其运行状态
- 通过journalctl查看系统和用户日志
- 查看所有系统启动的内核日志
- 从auditd查看审计规则
- 查看文件系统日志(如Apache、Nginx、syslog等)
- 查看Docker、Podman和Kubernetes pods日志
- 支持Windows事件日志
过滤功能
支持4种过滤模式:
- 默认 - 区分大小写的精确搜索
- 模糊搜索 - 类似fzf的不区分大小写搜索
- 正则表达式 - 基于Go的regexp库的正则搜索
- 时间戳 - 按日期和时间过滤
安装
Unix系统快速安装
curl -sS https://raw.githubusercontent.com/Lifailon/lazyjournal/main/install.sh | bash
Debian/Ubuntu
arch=$( [ "$(uname -m)" = "aarch64" ] && echo "arm64" || echo "amd64" )
version=$(curl -L -sS -H 'Accept: application/json' https://github.com/Lifailon/lazyjournal/releases/latest | sed -e 's/.*"tag_name":"\([^"]*\)".*/\1/')
curl -L -sS https://github.com/Lifailon/lazyjournal/releases/download/$version/lazyjournal-$version-$arch.deb -o /tmp/lazyjournal.deb
sudo apt install /tmp/lazyjournal.deb
Go安装
go install github.com/Lifailon/lazyjournal@latest
使用示例
基本使用
lazyjournal
命令行模式示例
# 为输出着色
cat /var/log/syslog | lazyjournal -c
# 使用模糊搜索过滤
cat /var/log/syslog | lazyjournal -f "error"
# 使用正则表达式过滤
cat /var/log/syslog | lazyjournal -r "failed|fatal|crash"
完整示例代码
package main
import (
"fmt"
"os/exec"
)
func main() {
// 运行lazyjournal查看系统日志
cmd := exec.Command("lazyjournal")
output, err := cmd.CombinedOutput()
if err != nil {
fmt.Printf("Error running lazyjournal: %v\n", err)
return
}
fmt.Println(string(output))
// 使用管道过滤日志
filterCmd := exec.Command("sh", "-c", "cat /var/log/syslog | lazyjournal -f 'error'")
filterOutput, err := filterCmd.CombinedOutput()
if err != nil {
fmt.Printf("Error filtering logs: %v\n", err)
return
}
fmt.Println(string(filterOutput))
}
控制快捷键
F1
或?
- 显示帮助Tab
- 切换到下一个窗口Shift+Tab
- 返回上一个窗口/
- 进入过滤窗口Esc
- 清除当前过滤文本或关闭帮助Enter
- 加载日志或返回Ctrl+C
- 退出
截图
许可证
本项目采用MIT许可证。
更多关于golang日志查看与过滤工具插件库lazyjournal的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于golang日志查看与过滤工具插件库lazyjournal的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
lazyjournal: Go语言日志查看与过滤工具库
lazyjournal 是一个轻量级的 Go 语言日志查看与过滤工具库,它提供了简单易用的 API 来帮助开发者高效地查看和分析日志。
主要特性
- 支持多种日志格式的解析
- 提供灵活的日志过滤功能
- 支持实时日志监控
- 轻量级且易于集成
安装
go get github.com/yourusername/lazyjournal
基本使用示例
1. 创建日志查看器
package main
import (
"fmt"
"github.com/yourusername/lazyjournal"
)
func main() {
// 创建日志查看器实例
viewer := lazyjournal.NewViewer()
// 设置日志文件路径
err := viewer.SetLogFile("/var/log/myapp.log")
if err != nil {
fmt.Printf("Failed to set log file: %v\n", err)
return
}
// 查看最新10条日志
entries, err := viewer.Tail(10)
if err != nil {
fmt.Printf("Failed to tail logs: %v\n", err)
return
}
for _, entry := range entries {
fmt.Println(entry.String())
}
}
2. 日志过滤
// 创建过滤器
filter := lazyjournal.NewFilter()
// 添加过滤条件
filter.AddCondition("level", "error") // 只显示错误级别的日志
filter.AddTimeRange(startTime, endTime) // 时间范围过滤
// 应用过滤器
filteredEntries, err := viewer.Filter(filter)
if err != nil {
fmt.Printf("Failed to filter logs: %v\n", err)
return
}
for _, entry := range filteredEntries {
fmt.Println(entry.String())
}
3. 实时日志监控
// 创建实时监控器
monitor := lazyjournal.NewMonitor("/var/log/myapp.log")
// 设置回调函数处理新日志
monitor.OnNewEntry(func(entry lazyjournal.LogEntry) {
fmt.Printf("New log: %s\n", entry.String())
})
// 开始监控
go monitor.Start()
// 监控10秒后停止
time.Sleep(10 * time.Second)
monitor.Stop()
高级功能
自定义日志解析器
// 定义自定义日志格式
type MyLogParser struct{}
func (p *MyLogParser) Parse(line string) (lazyjournal.LogEntry, error) {
// 实现自定义解析逻辑
return lazyjournal.LogEntry{}, nil
}
// 使用自定义解析器
viewer.SetParser(&MyLogParser{})
多文件日志聚合
// 创建聚合查看器
multiViewer := lazyjournal.NewMultiViewer()
// 添加多个日志文件
multiViewer.AddLogFile("/var/log/myapp1.log")
multiViewer.AddLogFile("/var/log/myapp2.log")
// 查看所有日志文件的最新5条记录
entries, err := multiViewer.Tail(5)
性能优化建议
- 对于大日志文件,使用
Seek
模式而非全量读取 - 合理设置缓冲区大小
- 使用异步处理进行日志过滤和分析
实际应用示例
package main
import (
"fmt"
"time"
"github.com/yourusername/lazyjournal"
)
func main() {
// 初始化日志查看器
viewer := lazyjournal.NewViewer()
viewer.SetLogFile("/var/log/nginx/access.log")
// 创建复杂过滤器
filter := lazyjournal.NewFilter()
filter.AddCondition("status", "500") // 只显示500错误
filter.AddTimeRange(
time.Now().Add(-1*time.Hour),
time.Now(),
)
// 获取过滤结果
errors, err := viewer.Filter(filter)
if err != nil {
fmt.Printf("Filter error: %v\n", err)
return
}
// 输出结果
fmt.Printf("Found %d server errors in last hour:\n", len(errors))
for _, e := range errors {
fmt.Println(e.String())
}
// 实时监控新错误
monitor := lazyjournal.NewMonitor("/var/log/nginx/access.log")
monitor.SetParser(viewer.GetParser())
errorFilter := lazyjournal.NewFilter()
errorFilter.AddCondition("status", "500")
monitor.SetFilter(errorFilter)
monitor.OnNewEntry(func(entry lazyjournal.LogEntry) {
fmt.Printf("New server error detected: %s\n", entry.String())
})
go monitor.Start()
defer monitor.Stop()
// 运行30分钟
time.Sleep(30 * time.Minute)
}
总结
lazyjournal 提供了简单而强大的日志处理能力,特别适合需要快速查看、过滤和分析日志的 Go 应用程序。通过灵活的 API 设计,开发者可以轻松集成到现有系统中,并根据需要扩展功能。
注意:以上示例中的 github.com/yourusername/lazyjournal
是一个假设的库路径,实际使用时请替换为真实的库路径。