This is a graphical log viewer for Python's standard logging module. It can be targeted with a SocketHandler with no additional setup (see Usage).
The program is in beta: it's lacking some features and may be unstable, but it works. cutelog is cross-platform, although it's mainly written and optimized for Linux.
This is my first released project, so the code is by no means stellar. Feedback and contributions are appreciated!
- Allows any number of simultaneous connections
- Fully customizable look of log levels and columns
- Filtering based on level and name of the logger, as well as filtering by searching
- Search through all records or only through filtered ones
- View exception tracebacks or messages in a separate window
- Dark theme (with its own set of colors for levels)
- Pop tabs out of the window, merge records of multiple tabs into one
Light theme | Dark theme |
---|---|
If you're using Linux, install PyQt5 from your package manager before installing cutelog (package name is probably python3-pyqt5
or python-pyqt5
). Or just run pip install pyqt5
to install it from pip, which is sub-optimal.
$ pip install cutelog
Or install the latest development version from the source:
$ pip install git+https://github.com/busimus/cutelog.git
- Python 3.5 (or newer)
- PyQt5 (preferably 5.6 or newer)
- Start
cutelog
- Put the following into your code:
import logging
from logging.handlers import SocketHandler
log = logging.getLogger('Root logger')
log.setLevel(1) # to send all messages to cutelog
socket_handler = SocketHandler('127.0.0.1', 19996) # default listening address
log.addHandler(socket_handler)
log.info('Hello world!')
Afterwards it's recommended to designate different loggers for different parts of your program with log_2 = log.getChild("Child logger")
.
This will create "log namespaces" which allow you to filter out messages from various subsystems of your program.
- Presets for colors
- Presets for the logger header (with option to add columns for extra data)
- Modify how rows are arranged in the detail table (like the header dialog)
- Fix double-search on the last matched result (or indicate that the last result was reached)
- Ability to save and load logs (as text or as full records)
- Alarms/notifications triggered by specified messages
- Figure out how to search up
- Proper exception handling in critical places
- Message boxes for errors to avoid relying on CLI logging
- Ability to ignore resources.py and instead use actual files for quick stylesheet reload, etc.
- Rewrite all/most UIs in code instead of using Qt Designer
- Switch to qtawesome instead of ion-icons?
- Support for custom themes?
- Rewrite the server with robust architecture and additional transports and serializers (e.g. ZeroMQ, WebSockets; msgpack)?
- Ditch asyncio if/when curio takes off?
- Or rewrite the whole thing in C++ and make it be a generic logging receiver not just for Python???
Free software used:
- PyQt5 - GPLv3 License, Copyright (c) 2018 Riverbank Computing Limited [email protected]
- ion-icons - MIT License, Copyright (c) 2016 Drifty (http://drifty.com/)
And thanks to logview by Vinay Sajip for UI inspiration.
Copyright (C) 2018, Alexander Bus
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License version 3 as published by the Free Software Foundation.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.