The goal is to get more from logs than most 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 with all the logs you are reading.
The best way is to get Go on your system and compile yourself. It's easier than it sounds:
$GOPATH/bin
in your PATH
.go install github.com/tigrawap/slit/cmd/slit@latest
If you prefer pre-built binaries, head over to the releases page - https://github.com/tigrawap/slit/releases. Keep in mind, however, that they might be some commits behind master branch.
/
- Forward search ?
- Backsearch n
- Next matchN
- Previous matchCTRL + /
- Switch between CaseSensitive
search and RegEx
&
- Filter: intersect-
- Filter: exclude+
- Filter: union=
- Remove all filtersU
- Removes last filterC
- 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)f
, PageDown
, Space
, CTRL + F
- Page DownCTRL + D
- Half page downb
, PageUp
, CTRL + B
- Page UpCTRL + U
- Half page upg
, Home
- Go to first lineG
, End
- Go to last lineArrow down
, j
- Move one line downArrow up
, k
- Move one line upArrow left
, Arrow right
- Scroll horizontally<
, >
- Precise horizontal scrolling, 1 character a timeK
- Keep N first characters(usually containing timestamp) when navigating horizontallyW
- Wrap/Unwrap linesCTRL + S
- Save filtered version to file (will prompt for filepath)q
- quitBoth search and filters currently support the CaseSensitive
and RegEx
modes.
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*
mode use (?i)cOnDiTiOn
TODO: This will be replaced with a separate toggle in the future
--always-term
- Always opens in term mode, even if output is short--debug
- Enables debug messages, written to /tmp/slit.log--filters=nginx_php_errors
- Specifies path to the file containing predefined filters or inline filters separated by semicolon (see "Filters")--follow -f
- Follow file/stdin. All filters are applied to new data
When navigating up from the end, following will be stopped and resumed upon navigating to the end shift+g, or just by scrolling down till the end--keep-chars=10
, -K 10
- Predefines number of kept chars (see K in "Key bindings")--output=/output/path
, -O /output/path
- Sets stdin cache location, if not set tmp file used, if set file preserved--short-stdin-timeout=10000
- Sets maximum duration (ms) to wait for delayed short stdin--version
- Displays version`
- (Backtick) Mark top line for highlighting (i.e. will be shown no matter what other filters are active)~
- Highlight filter, i.e. search and highlight everything that matchesh
- Move to next highlighted lineH
- Move to previous highlighted linectrl+h
- Remove all highlights=
- Removes filters only. Does not remove highlights via ~
Filters can be chained - the first 'append' filter (if it is the first to be used) will work as an inclusive filter. When adding filters the active line position (at the top of the screen) will remain the same (…as possible).
Chaining of filters gives you the ability to filter out all the 'noise' dynamically, and get to what you're actually looking for.
Imagine: you have a huge log file with hundreds of thousands of lines from multiple threads. All that you're interested in are logs from "Thread-10, "MainThread"; you're not interested in "send" and "receive" messages. In addition, you want to see "Exception"s, even if they're on lines 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 a separate file and specify its name using the command line argument --filters
.
Notes:
&
, +
or -
) are ignoredYou 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 the file "nginx_php_errors", then remove lines without substring "debug.php" and add the lines
with substring "WARN".
Notes:
(DEBUG OR INFO) AND NOT (send OR receive OR "pipe closed")
MIT License