The Logfile Navigator 是一个高级的日志查看工具,后面简写为 lnav。

早上在看 [[Logdy]] 的时候(一款可以将终端的输出 (stdout)发送给浏览器 UI 界面,在可视化界面中检索浏览的开源工具),在作者发帖的讨论中,看到有人推荐 lnav 这一款工具,在本地开发的时候,用 lnav 来查看日志。1

在不知道 lnav 之前,我一直都是使用 tail -f, less, zless, more 来查看日志的,但是 less 这一些工具都是不带高亮的,所以每一次都需要通过搜索来找到自己的想要的内容,但看到 lnav 的介绍立即就看到了 lnav 的高亮显示,立马就尝试了一下。

特性

  • 根据日志内容自动高亮 ERROR 等等关键字
  • 自动滚动刷新
  • 根据正则表达式过滤内容,比如查询 IP 地址等等情况
  • 使用 SQL 查询

安装

Ubuntu 下

sudo apt install lnav

使用

完整的命令行参数

❯ lnav -h
usage: lnav [options] [logfile1 logfile2 ...]

A curses-based log file viewer that indexes log messages by type
and time to make it easier to navigate through files quickly.

Key bindings:
  ?     View/leave the online help text.
  q     Quit the program.

Options:
  -h         Print this message, then exit.
  -H         Display the internal help text.
  -I path    An additional configuration directory.
  -H         Display the internal help text.
  -I path    An additional configuration directory.
  -i         Install the given format files and exit.  Pass 'extra'
             to install the default set of third-party formats.
  -u         Update formats installed from git repositories.
  -C         Check configuration and then exit.
  -d file    Write debug messages to the given file.
  -V         Print version information.

  -a         Load all of the most recent log file types.
  -r         Recursively load files from the given directory hierarchies.
  -R         Load older rotated log files as well.
  -t         Prepend timestamps to the lines of data being read in
             on the standard input.
  -w file    Write the contents of the standard input to this file.

  -c cmd     Execute a command after the files have been loaded.
  -f path    Execute the commands in the given file.
  -n         Run without the curses UI. (headless mode)
  -q         Do not print the log messages after executing all
             of the commands or when lnav is reading from stdin.

Optional arguments:
  logfile1          The log files or directories to view.  If a
                    directory is given, all of the files in the
                    directory will be loaded.

Examples:
  To load and follow the syslog file:
    $ lnav

  To load all of the files in /var/log:
    $ lnav /var/log

  To watch the output of make with timestamps prepended:
    $ make 2>&1 | lnav -t

Version: lnav 0.8.5

直接查看日志文件

lnav /path/to/file.log

进入 lnav 之后还有一些快捷键,可以使用 ? 呼出帮助。

和 Linux 下大部分交互的工具一样,lnav 也遵循了一直的交互逻辑

  • g, 到文件第一行
  • G, 到文件最后一行
  • space, 下一页
  • b/bs, 上一页
  • j, 下一行
  • k, 上一行
  • h, 向左移
  • l, 向右移动
  • e/E, 上一个,下一个 error
  • w/W, 上一个,下一个 warning
  • f/F, 下一个,上一个文件
  • /,检索
  • n/N, 上一个下一个检索结果

可以看到上面的这些快捷,基本上和 Vim/less 的一致。

还有一些调整显示的选项

  • i,开启显示日志直方图
  • t,开启或关闭 text file view

检索语句

  • :<command> 执行内部命令,具体的命令可以查看帮助文档,或者阅读 ? 中的文档
    • :goto 2 hour ago
    • :goto 12:00
  • ;<sql>,执行 SQL 检索