lv
lv is a logviewer for Bunyan-based logs (like go-logger). It also supports pinojs logs.
Installation
Linux
You can grab the latest Debian/Ubuntu, RedHat package from the releases page and install it with the following commands:
If you use Homebrew, you can install lv with:
brew install gildas/tap/lv
macOS
You can get lv from Homebrew with:
brew install gildas/tap/lv
Binaries
You can download the latest version of lv from the releases page.
Usage
You can read logs from a file or from a pipe.
lv /path/to/logfile
or
tail -f /path/to/logfile | lv
By default, lv will display the log in a pager with colors, if the output is a terminal (you can turn off the pager with --no-pager). Any line that does cannot be unmarshaled in one of the supported format will be displayed as raw text.
It will also display the time in UTC. you can display the time in local time with the --local flag or use any timezone of your preference with --time xx where xx is the name of the timezone, a time difference from UTC.
lv --local /path/to/logfile
lv --time America/New_York /path/to/logfile
lv --time +02:00 /path/to/logfile
lv --time -3 /path/to/logfile
When the --o short flag is used, the time is displayed in a short format.
If the log entries contain a topic and a scope fields, lv will display them in color.
You can also use lv to filter logs by level:
lv --level=info /path/to/logfile
The level follows the go-logger format. For example:
--level=info will display logs of level info and above
--level=debug will display logs of level debug and above
--level 'INFO;DEBUG{topic};TRACE{:scope}' will display logs of level infoand debug for any entry with topic topic and trace for any entry with scope scope.
You can also filter logs with the --filter flag. The filter is similar to a JSONPath expression. For example:
lv --filter '.field == "value"' /path/to/logfile
lv --filter '.field1 == .field2' /path/to/logfile
lv --filter '.field =~ /regexp/' /path/to/logfile
lv --filter '.field1 == true && .field2 == 12' /path/to/logfile
Flags
Here is a list of the flags you can use with lv:
--color Colorize output always, even if the output stream is not a TTY. (default true)
-c, --condition string Run each log message through the filter.
--debug forces lv's logging at DEBUG level
-f, --filter string Run each log message through the filter.
-h, --help help for lv
--level string Only shows log entries with a level at or above the given value.
-L, --local Display time field in local time, rather than UTC.
--log string where lv's logs are writen if given (by default, no log is generated)
--no-color Do not colorize output. By default, the output is colorized if stdout is a TTY
--no-pager Do not pipe output into a pager. By default, the output is piped throug less
(or $PAGER if set), if stdout is a TTY (default true)
-o, --output string output mode/format. One of long, json, short, html, serve, server (default "long")
--time string Display time field in the given timezone.
-v, --verbose runs verbosely if set
--version version for lv
Caveats
Not all the output formats are implemented yet.
Troubleshooting
lv uses go-logger to write its own logs. You can enable the logs with the --log flag. By default lv does not log anything.
TODO
- Add support to read logs from
aws, gcp and azure services.
- Add support for
k8s logs.