A terminal log file viewer with enhanced JSONL support - based on Toolong
Project description
TailJLogs
Based on Textualize/toolong by Will McGugan
A terminal application to view, tail, merge, and search log files with enhanced JSONL support.
What's New in v2.4
- Log Summary Mode: New
--summaryflag to scan and summarize log files- Groups rotated log files by base name (e.g.,
app.001.jsonl,app.002.jsonl→app) - Reports first/last log timestamps, timespan, and log level counts
- Supports JSON output with
--jsonflag - Recursive/non-recursive directory scanning with
-r/--no-recursive
- Groups rotated log files by base name (e.g.,
What's New in v2.1
- Merged File Tailing: Now you can tail multiple merged files simultaneously (
Ctrl+T) - Filename Prefix in Merged View: Each line shows a colored filename prefix (docker-compose style)
- Glob Pattern Support: Use wildcards like
*.jsonl,logs/**/*.log - Directory Expansion: Pass a directory to automatically find all log files
What's New in v2.0
TailJLogs v2.0 is a complete rewrite based on the excellent Toolong project by Will McGugan. Key enhancements:
- JSONL Compact Format: JSONL logs display in a readable format:
01-15T09:36:38.194 INFO module 39 : message - Separate Filter Dialog (
\key): Hide non-matching lines (vs Find which highlights matches) - Full TUI Experience: Navigate with arrow keys, view detailed JSON with Enter
- Updated for Textual 7.x: Modern async terminal UI
Features
- 📋 Live tailing of log files (single or merged)
- 🎨 Syntax highlights common web server log formats
- ⚡ Fast - opens multi-gigabyte files instantly
- 📝 Enhanced JSONL support: Compact formatted display + pretty-printed detail view
- 📦 Opens
.bzand.bz2files automatically - 🔀 Merge & tail multiple files with colored filename prefixes
- 🔍 Find (
/orCtrl+F): Highlight matching lines - 🔎 Filter (
\): Show only matching lines - 📁 Glob patterns:
*.jsonl,logs/**/*.log, directories - 📊 Summary mode: Scan directories and report log statistics
Installation
# Using pip
pip install tailjlogs
# Using uv (recommended)
uv tool install tailjlogs
# Using pipx
pipx install tailjlogs
Update
# Using pip
pip install --upgrade tailjlogs
# Using uv
uv tool update tailjlogs
# Using pipx
pipx upgrade tailjlogs
After installation, use either tailjlogs or tl command.
Usage
# View a log file
tailjlogs /path/to/logfile.jsonl
tl /path/to/logfile.jsonl
# View multiple files (opens in tabs)
tl access.log error.log app.jsonl
# Merge multiple files by timestamp
tl --merge access.log error.log app.jsonl
# Glob patterns
tl *.jsonl # All .jsonl files
tl logs/**/*.log # Recursive glob
tl /var/log/myapp/ # Directory (finds all log files)
# Merge and tail (docker-compose style output)
tl --merge *.jsonl
# Then press Ctrl+T to start tailing
# Summary mode - scan and report log statistics
tl --summary . # Current directory
tl --summary /var/log/myapp/ # Specific directory
tl --summary logs/ --json # Output as JSON
tl --summary logs/ --no-recursive # Don't search subdirectories
Summary Mode Output
📁 api_v2
------------------------------------------------------------
Files: 2
- api_v2.jsonl
- rotation/api_v2.001.jsonl
Total Lines: 2,360
First Log: 2026-01-31 04:49:56
Last Log: 2026-02-01 08:01:47
Timespan: 1d 3h 11m 51s
Level Range: DEBUG to INFO
Level Counts:
DEBUG : 1,579
INFO : 781
Merged View with Filename Prefix
When viewing merged files, each line shows a colored filename prefix:
db_monitor │ 01-15T09:36:38.194 INFO cache 15 : Cache hit
error │ 01-15T09:36:38.200 ERROR api 42 : Connection failed
db_monitor │ 01-15T09:36:38.210 DEBUG db 89 : Query executed
Keyboard Shortcuts
Navigation
| Key | Action |
|---|---|
↑/↓ or w/s or k/j |
Move up/down a line |
←/→ or h/l |
Scroll left/right |
Page Up/Page Down or Space |
Next/previous page |
Home or G |
Jump to start |
End or g |
Jump to end (press twice to tail) |
m/M |
Advance +1/-1 minutes |
o/O |
Advance +1/-1 hours |
d/D |
Advance +1/-1 days |
Features
| Key | Action |
|---|---|
/ or Ctrl+F |
Find - highlight matching lines |
\ |
Filter - show only matching lines |
Enter |
Toggle pointer mode / View JSON detail |
Ctrl+L |
Toggle line numbers |
Ctrl+T |
Tail current file |
? |
Show help |
Ctrl+C or q |
Exit |
JSONL Format
TailJLogs displays JSONL log entries in a compact format:
01-15T09:36:38.194 INFO auth 42 : User logged in
01-15T09:36:39.521 WARNING api 156 : Rate limit approaching
01-15T09:36:40.003 ERROR database 89 : Connection timeout
Press Enter on any line to see the full JSON object, pretty-printed.
Expected JSONL fields:
{
"timestamp": "2025-01-15T09:36:38.194Z",
"level": "INFO",
"message": "User logged in",
"module": "auth",
"line": 42
}
Development
git clone https://github.com/brianoflondon/tailjlogs.git
cd tailjlogs
uv sync
uv run tailjlogs --help
Credits
This project is based on Toolong by Will McGugan and the Textualize team. Built with Textual.
License
MIT License - see LICENSE for details.
Original Toolong: Copyright (c) 2024 Will McGugan This fork: Copyright (c) 2025 Brian of London
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tailjlogs-2.4.2.tar.gz.
File metadata
- Download URL: tailjlogs-2.4.2.tar.gz
- Upload date:
- Size: 169.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a661d17749812a9d60f0cd6bba9fd7ba2ad40273cb2a02b13ecfd6fe91a9c192
|
|
| MD5 |
72df87909b26156d01dfbc9e9dc23c98
|
|
| BLAKE2b-256 |
6f1c9e2f7afafeee001c8ef713194a7481c803bffeab808715f324564c36bed5
|
File details
Details for the file tailjlogs-2.4.2-py3-none-any.whl.
File metadata
- Download URL: tailjlogs-2.4.2-py3-none-any.whl
- Upload date:
- Size: 45.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
691a01760ba865cccc9ca0e56085b42ffe5f9d582e25a9c09f2bb895154d3f8c
|
|
| MD5 |
7959605797c7b54dc7124b88803fbb9d
|
|
| BLAKE2b-256 |
a66ae545430c6896d5cbfb98b39870b511a9ff7a69bacf25d4a25d9f14128ae5
|