| Crates.io | taill |
| lib.rs | taill |
| version | 0.2.0 |
| created_at | 2025-04-14 02:27:12.689485+00 |
| updated_at | 2026-01-22 04:24:03.123378+00 |
| description | A TUI log viewer with search, filtering, and real-time file monitoring |
| homepage | |
| repository | https://github.com/zhangzhishanlo/taill |
| max_upload_size | |
| id | 1632311 |
| size | 88,111 |
A TUI log viewer with search, filtering, and real-time file monitoring. Watch log files as they update with syntax highlighting, level-based coloring, and powerful filtering capabilities.
Install from crates.io:
cargo install taill
Or build from source:
git clone https://github.com/zhangzhishan/taill.git
cd taill
cargo build --release
taill -f <pattern>
Watch all log files in current directory:
taill -f "*.log"
Watch with a specific log format:
taill -f "*.log" --format common
List available log formats:
taill --list-formats
taill supports multiple log formats out of the box:
| Format | Description | Example |
|---|---|---|
indexserve |
IndexServe format (default) | d,01/21/2026 17:39:52,Logger,Message |
common |
Common log format | [INFO] 2026-01-21 17:39:52 - Message |
simple |
Simple format | INFO: Message |
syslog |
Syslog format | Jan 21 17:39:52 host app: Message |
json |
JSON logs | {"level": "info", "message": "..."} |
plain |
No parsing | Shows raw log lines |
Use --format <name> to select a format, or configure a default in the config file.
taill looks for configuration files in the following locations (in order):
%APPDATA%\taill\config.toml (Windows) or ~/.config/taill/config.toml (Linux/Mac)~/.taill.toml./taill.toml (current directory)# Set the default log format
default_format = "indexserve"
# Define custom log formats
[formats.myapp]
# Regex pattern with named capture groups: level, timestamp, logger, message
pattern = "^\\[(?P<level>\\w+)\\]\\s+(?P<timestamp>[^|]+)\\|\\s*(?P<message>.*)$"
# Map level strings to log levels
[formats.myapp.levels]
debug = ["DEBUG", "TRACE"]
info = ["INFO"]
warn = ["WARN", "WARNING"]
error = ["ERROR", "FATAL"]
# JSON format example
[formats.myjson]
type = "json"
level_field = "severity"
timestamp_field = "ts"
message_field = "msg"
Use regex with named capture groups:
(?P<level>...) - Log level (required for level coloring)(?P<timestamp>...) - Timestamp(?P<logger>...) - Logger name(?P<message>...) - Log messageMap log level strings to standard levels:
debug - Debug level (gray)info - Info level (green)warn - Warning level (yellow)error - Error level (red, bold)| Key | Action |
|---|---|
/ |
Enter search mode |
Enter |
Confirm search |
Esc |
Cancel search / Clear filter |
f |
Cycle level filter (ALL → INFO → WARN → ERROR) |
1 |
Show all levels |
2 |
Show INFO and above |
3 |
Show WARN and above |
4 |
Show ERROR only |
Space |
Pause/Resume log updates |
j / ↓ |
Scroll down |
k / ↑ |
Scroll up |
g |
Jump to top |
G |
Jump to bottom (follow mode) |
PageUp |
Scroll up 20 lines |
PageDown |
Scroll down 20 lines |
q / Ctrl+C |
Quit |
The status bar displays:
[FOLLOW] when auto-scrolling, [PAUSED] when paused-f <pattern>: The file pattern to watch (required)-F, --format <name>: Log format to use--list-formats: List available log formats--help: Display help information--version: Display version informationThis project is licensed under the MIT License - see the LICENSE file for details.
Zhishan Zhang (zhangzhishanlo@gmail.com)