Slit - modern $PAGER for noisy logs
The goal is to get more from logs than most of other pagers can. And to do so in less time.
Slit supports opening a single file (for now), or reading input from stdin. Slit is runs in terminal mode, writing directly to the screen, without cluttering the terminal buffer by all the logs you are reading.
The best way is to get Go on your system and compile yourself. It's easier then it sounds:
- download and install from https://golang.org/dl/
- make sure that you got
go get github.com/tigrawap/slit/cmd/slit
If you prefer pre-built binaries, head over to the releases page - https://github.com/tigrawap/slit/releases. Keep in mind however they might be some commits behind master branch.
/- Forward search
n- Next match
N- Previous match
CTRL + /- Switch between
&- Filter: intersect
-- Filter: exclude
+- Filter: union
=- Remove all filters
U- Removes last filter
C- Stands for "Context", switches off/on all filters, helpful to get context of current line (which is the first line, at the top of the screen)
Space- Page Down
PageUp- Page Up
Home- Go to first line
End- Go to last line
j- Move one line down
k- Move one line up
Arrow right- Scroll horizontally
>- Precise horizontal scrolling, 1 character a time
K- Keep N first characters(usually containing timestamp) when navigating horizontally
Up/Down arrows during K-mode will adjust N of kept chars
W- Wrap/Unwrap lines
CTRL+S- Save filtered version to file (will prompt for filepath)
Both search and filters currently support the
To switch between modes press
CTRL + / in search/filter input.
TODO: History does not preserve mode of previous searches. Will be improved soon
Note: For case-insensitive search in RegEx use
TODO: This will be replaced with separate toggle in the future
Command line arguments
--follow -fFollow file/stdin. All filters are applied to new data.
When navigating up from the end, following will be stopped and resumed on navigating to the end(shift+g) or just by scrolling down till the end
-K 10- Predefines number of kept chars (see K in key bindings)
--filters=nginx_php_errorsSpecifies path to the file containing predefined filters or inline filters separated by semicolon (see "Filters" section)
- Inclusive(&): Will keep only lines that match the pattern AND included by previous filters
- Exclusive(-): Filters out lines that match the pattern
- Appending(+): Filters in lines that match pattern, even if they were excluded by previous filters
Filters can be chained - The first 'append' filter (if it is the first to be used) will work as inclusive filter. When adding filters the active line position (at top of screen) will remain the same (as possible).
Chaining of filters gives ability to filter out all the 'noise' dynamically, and get to what you're actually looking for.
Imagine you have huge log file with hundreds of thousands of lines from multiple threads.
And all that you are interested in are logs from "Thread-10, "MainThread", not interested in "send" and "receive" messages
In addition, you want to see "Exception", even if it is on line that were excluded by previous filters.
The following chain of filters will output the expected result:
&Thread-10 +MainThread -receive -send +Exception
You can save the lines above to the separate file and specify its name in the command line argument
- empty lines are ignored
- leading spaces before filter sign (
-) are ignored
- trailing spaces (if present) are also part of the search string
- all filters are case sensitive
You can also add semicolon separated inline filters in the argument
--filters with or without filter file names (the last
should also be separated by semicolon). E.g.
$ slit --filters="nginx_php_errors;-debug.php;+WARN" /var/log/nginx/error.log
will apply filters from file "nginx_php_errors" and then remove lines without substring "debug.php" and add the lines
with substring "WARN".
- the first non-whitespace character should be a valid filter sign (see section "Filters"), otherwise this option item will be treated as a file name
- leading semicolon characters are ignored
- all other rules are the same as for filters in the separate files (see section "Filter files")
- Complex include/exclude filters, that will allow: (DEBUG OR INFO) AND NOT (send OR receive OR "pipe closed")
- Filters menu for overviewing current filters, removal, reordering or disable some temporary