A standalone, web-based log viewer with real-time streaming.
- π Real-time log streaming via WebSockets
- π Track multiple logs with simple aliases
- ποΈ Project grouping - group related logs under collapsible project sections
- π Folder import - add all
.logfiles from a folder as a project (ezlog add-folder) - π Web interface for easy viewing
- π Standalone binary - no Python installation needed
- β‘ Fast loading - shows last 500 lines instantly
- π Infinite scroll - loads history as you scroll up
- π― Navigation buttons - jump to top/bottom quickly
- βΈοΈ Pause/Resume - buffer logs while you read
- π Real-time filtering
- π Full-file search (press Enter in filter box)
- π¨ Multiple themes (Dark, Light, Solarized)
- π± Mobile responsive
- π§ Simple CLI for log management
- π Route-based log tabs (
/logs/<alias>) - βοΈ Bulk remove (
ezlog remove alias1 alias2 alias3) - β¬οΈ One-command self-upgrade (
ezlog upgrade)
Visit the releases page: https://github.com/legeRise/ezlog/releases
Or use command line:
cd ~/Downloads
wget https://github.com/legeRise/ezlog/releases/latest/download/ezlog-linux-x64.tar.gztar -xzf ezlog-linux-x64.tar.gz
cd ezlog-linux-x64sudo ./install.shThis will install ezlog to /usr/local/ezlog/ and make it available system-wide.
Open a new terminal and run:
ezlog --helpIf you see the help message, installation was successful.
Now that ezlog is installed system-wide, you can delete the download folder:
cd ~/Downloads
rm -rf ezlog-linux-x64
rm ezlog-linux-x64.tar.gzezlog add myapp /var/log/myapp.log
ezlog list
ezlog start
# Open browser: http://localhost:9200When a new release is available (v1.1.0+), just run:
ezlog upgradeWhat it does:
- Downloads latest release tarball
- Compares installed binary vs downloaded binary
- Skips install if already up-to-date
- Stops running ezlog (if running), installs new release, restarts it
- Reuses last host/port automatically on restart
On v1.0.5 (pre-upgrade command)? Use this one-liner:
sudo curl -L https://github.com/legeRise/ezlog/releases/latest/download/ezlog-linux-x64.tar.gz | sudo tar -xz -C /tmp && sudo /tmp/ezlog-linux-x64/install.sh && sudo rm -rf /tmp/ezlog-linux-x64Or just reinstall from scratch following Steps 1-5.
Screenshot: Main view showing log list in sidebar
EZLog does not include built-in authentication. If you expose it on a server, put it behind Nginx Basic Auth.
First, create a password file:
sudo apt update
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.ezlog_htpasswd yourusernameThen add Basic Auth inside the Nginx location block that proxies EZLog:
location / {
auth_basic "EZLog";
auth_basic_user_file /etc/nginx/.ezlog_htpasswd;
proxy_pass http://127.0.0.1:9200;
}Use HTTPS at the proxy when exposing EZLog beyond a trusted local network.
-
Clone the repository:
git clone https://github.com/legerise/ezlog.git cd ezlog -
(Optional) Bump the version number in
cli.py:# Edit cli.py and change: EZLOG_VERSION = "1.0.5" β EZLOG_VERSION = "1.1.0"
-
Build the binary:
chmod +x build.sh ./build.sh
This creates
dist/ezlog/with the standalone binary. -
Package for distribution:
chmod +x package.sh ./package.sh
This creates
ezlog-linux-x64.tar.gzβ ready for GitHub Releases or sharing.Build workflow summary:
Bump version in cli.py β ./build.sh β ./package.shNotes:
build.shcompiles a fresh binary using PyInstaller.package.shdoes not compile; it only packagesdist/ezloginto a tarball.- Always bump the version before building so the binary reports the correct version.
-
Install system-wide:
sudo ./install.sh
This installs the binary to
/usr/local/ezlog/and creates a symlink at/usr/local/bin/ezlog. -
Create distribution tarball:
chmod +x package.sh ./package.sh
This creates
ezlog-linux-x64.tar.gzfor GitHub Releases or direct sharing.
Let's say you're a developer working on a server with 5 different projects, each with their own log files in different locations:
/var/log/nginx/access.log
/home/user/myapp/logs/app.log
/opt/api-server/logs/api.log
/var/www/website/errors.log
/home/user/scripts/cron.log
Instead of remembering these long paths and using tail -f for each one, ezlog lets you organize them.
An alias is a short nickname you give to a log file. Instead of typing the full path, you use the alias.
# Syntax: ezlog add <alias> <full-path-to-log-file>
```bash
ezlog add nginx /var/log/nginx/access.log
ezlog add myapp /home/user/myapp/logs/app.log
ezlog add api /opt/api-server/logs/api.log
ezlog add website /var/www/website/errors.log
ezlog add cron /home/user/scripts/cron.logAfter each command, you'll see:
Added nginx -> /var/log/nginx/access.log
Check all tracked logs (grouped by project):
ezlog listOutput (flat aliases):
nginx /var/log/nginx/access.log
myapp /home/user/myapp/logs/app.log
Output (project-grouped using dot notation, e.g. project.sub_alias):
π myapp:
β’ access /var/log/nginx/access.log
β’ api /opt/api-server/logs/api.log
π website:
β’ errors /var/www/website/errors.log
β’ cron /home/user/scripts/cron.log
Now you can see all your logs and their aliases at a glance.
ezlog startOutput:
β
Started ezlog in background (PID: 12345)
π Visit http://0.0.0.0:9200
βΉοΈ Stop with: ezlog stop
Open your browser and go to: http://localhost:9200
You'll see a web interface with all your tracked logs listed. Click any alias (nginx, myapp, api, etc.) to view that log in real-time.
Tip: type in the filter box to filter currently loaded lines. Press Enter to search the entire file and show global matches.
Each selected log updates the URL to /logs/<alias>, so you can open different aliases in different tabs and share direct links.
Screenshot: Log file selected and displaying live logs
Screenshot: Scrolled to top of log file showing oldest entries
Add a folder of logs (project grouping):
# Add all .log files from a folder as a project
ezlog add-folder /var/log/myapp/
# Custom project name
ezlog add-folder /var/log/myapp/ --project production
# Use a custom extension pattern
ezlog add-folder /var/log/nginx/ --pattern "*.access.log"
# Include ALL files (not just .log)
ezlog add-folder /var/log/myapp/ --all
# Short flags
ezlog add-folder /var/log/myapp/ -p myapp -aAll files are added as project.filename (e.g. myapp.app, myapp.error).
In the web UI, they appear grouped under a collapsible project section.
Update a log path:
# If your log file moves to a new location
ezlog update myapp /home/user/newpath/app.logRemove logs (single, bulk, or by project):
# Remove a single log
ezlog remove myapp.api
# Remove multiple logs at once
ezlog remove myapp.api myapp.error myapp.cron
# Remove an entire project group
ezlog remove --project myapp
ezlog remove --project myapp --yes # Skip confirmationRemove all tracked logs (with confirmation):
ezlog clear
# or non-interactive
ezlog clear --yesCheck tracked logs health (missing paths):
ezlog check
ezlog check --missing-onlyPrune dead aliases automatically:
ezlog prune
ezlog prune --project myapp # Scope to a project
# or non-interactive
ezlog prune --yesCustom port and host:
# Run on a different port
ezlog start --port 8000
# Run on localhost only (more secure)
ezlog start --port 9200 --host 127.0.0.1Process management:
ezlog version # Show version + install details
ezlog status # Check if running
ezlog stop # Stop background process
ezlog start # Start in background
ezlog run # Run in foreground (for debugging)
ezlog upgrade # Auto-download and install latest releaseUpgrade options:
ezlog upgrade --check-only # Only check if update exists
ezlog upgrade --yes # Non-interactive
ezlog upgrade --no-restart # Install only
ezlog upgrade --port 9200 --host 0.0.0.0 # Restart targetAll your tracked logs are saved in: ~/.ezlog/tracked_logs.json
This means each user on the system can track their own logs independently.
- Build time: Python 3.9+, pip, PyInstaller
- Runtime: None! The binary is completely standalone
- Track log files with aliases
- Start the web server (runs in background)
- View logs in real-time through your browser
- WebSocket streams new log lines as they're written
- Scroll up to load history in 500-line chunks
- Use navigation buttons to jump to top/bottom
- Pause to read, resume to continue streaming
sudo rm -rf /usr/local/ezlog
sudo rm /usr/local/bin/ezlog
rm -rf ~/.ezlog # Optional: removes tracked log configRun in development mode:
pip install -r requirements.txt
python cli.py run --port 9200MIT