Observed since 20 Oct, 19:09 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
Modern terminal-based viewer for ULog embedded traces with real-time serial monitoring
Modern terminal-based viewer for ULog embedded traces
µLogger is a powerful TUI (Text User Interface) application for viewing real-time logs from embedded systems using the ULog API. It combines a serial console with intelligent log parsing and filtering capabilities.
ulogger.exe from latest releasepip install adarwoo-ulogger
git clone https://github.com/adarwoo/ulogger.git
cd ulogger
poetry install
poetry run python -m ulogger
ulogger [elf_file] [-C COM_PORT] [-l LEVEL] [-b BUFFER_DEPTH]
Example:
ulogger firmware.elf -C COM4
First time usage: Simply run ulogger and use the interactive dialogs to select your ELF file and COM port.
Real-time log viewing with color-coded levels and filtering
Filter logs by source file with per-level counts
Select which log levels to display
Browse all log definitions from the ELF file with sort and search
Select ELF file from recent files or browse
Choose serial port for live logging
💡 Note: Screenshots captured using Textual's built-in SVG export feature for crisp, scalable images.
You install the viewer using pip install or build a windows executable with pyinstaller.
usage: ulog_console.exe [-h] [-l LEVEL] [-x] [-C COMM] [-b BUFFER_DEPTH] elf
ulog trace viewer (ncurses + live UART)
positional arguments:
elf Path to ELF file with .logs section
options:
-h, --help show this help message and exit
-l, --level LEVEL Display log level threshold (0–8)
-x, --clear Clear screen on ELF reload
-C, --comm COMM UART serial port (e.g. /dev/ttyUSB0 or COM4)
-b, --buffer-depth BUFFER_DEPTH
Internal buffer depth (e.g. 100k, 2M). Default: 100000
| Key | Action |
|---|---|
z | Freeze/Unfreeze display (buffer keeps filling) |
c | Clear all logs |
l | Open level filter dialog |
+/- | Expand/Contract level filter |
f | Open file filter dialog |
p | Select COM port |
r | Reset all filters |
e | View all log entry definitions from ELF |
v | View all log lines in modal |
q | Quit application |
↑/↓ | Scroll up/down |
PgUp/PgDn | Page up/down |
Home/End | Jump to top/bottom |
0-8 on a file to view logs at that levelEnter on a file to view all its logsEsc or q to close dialogs - Cycle sort mode (none → level → file)Ctrl+F - Toggle searchEsc - Close search or exit viewerusage: ulogger [-h] [-l LEVEL] [-x] [-C COMM] [-b BUFFER_DEPTH] [elf]
positional arguments:
elf Path to ELF file with .logs section (optional)
options:
-h, --help Show help message
-l, --level LEVEL Display log level threshold (0-8, default: 8)
-x, --clear Clear screen on ELF reload
-C, --comm COMM UART serial port (e.g. /dev/ttyUSB0 or COM4)
-b, --buffer-depth BUFFER_DEPTH
Internal buffer depth (e.g. 100k, 2M, default: 100000)
| Level | Name | Color | Use Case |
|---|---|---|---|
| 0 | ERROR | Red | Critical errors |
| 1 | WARN | Yellow | Warnings |
| 2 | MILE | Bright Yellow | Milestones |
| 3 | INFO | Green | General info |
| 4 | TRACE | Blue | Trace execution |
| 5 | DEBUG0 | White | Debug info |
| 6 | DEBUG1 | Gray | Detailed debug |
| 7 | DEBUG2 | Dim | Very detailed |
| 8 | DEBUG3 | Dim | Maximum detail |
# Clone repository
git clone https://github.com/adarwoo/ulogger.git
cd ulogger
# Install dependencies
poetry install
# Run in development
poetry run python -m ulogger
# Run tests (if available)
poetry run pytest
# Install build dependencies
poetry add --group dev pyinstaller
# Generate icon (optional)
python create_icon.py
# Build executable
poetry run pyinstaller ulogger.spec
# Output: dist/ulogger.exe
The executable includes:
On AVR microcontrollers, ULog provides exceptional performance:
| Metric | Value | Description |
|---|---|---|
| Library Size | < 300 bytes | Includes UART handling and double buffer |
| Throughput | > 3000 msg/s | At 115200 baud |
| Flash per Log | 8 bytes | Zero RAM overhead |
| RAM Usage | 30-100 bytes | Configurable buffer size |
| CPU Cycles/Trace | 214 (11µs) | Single trace, no arguments |
| CPU Load @ 300 msg/s | < 1% | Includes ULog and UART |
| IDLE Latency | < 23µs | Additional reactor handler latency |
ULog uses a clever approach different from other logging libraries:
.logs section (unmapped, uses no flash)✅ No preprocessing required - Unlike Trice, no JSON extraction needed ✅ Tiny footprint - 100 debug statements cost < 1KB flash ✅ No code intrusion - Linker script patch optional ✅ Smart filtering - Viewer knows all possible traces upfront ✅ Type-safe - Variable types extracted from ELF, no format strings needed
textual >= 0.96.1 - Modern TUI frameworkpyserial >= 3.5 - Serial port communicationplatformdirs >= 4.0.0 - Cross-platform settings storagepyelftools >= 0.31 - ELF file parsingsqlalchemy >= 2.0.0 - Database modelspoetry - Dependency managementpyinstaller >= 6.16.0 - Executable building (optional)Contributions welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License - see the LICENSE file for details.
Made with ❤️ for embedded developers
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 1.2.0 | 3 Jan 2026 | 4 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 19:09 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:d0502e87d9eb55632c4a7246bc72eaf49213749482566c86c5aa07d40f7b69fc