Hallo zusammen,
ich stelle hier MachineLogMonitor vor, ein Desktop-Tool zum Mitlesen von Textlogs, wie sie Mikrocontroller, Steuerungen und Maschinen über die serielle Schnittstelle oder über CAN ausgeben. Der Anlass: beim Inbetriebnehmen und Testen will ich denselben Logstrom gleichzeitig komplett, nur die Fehler und nur einen bestimmten Teil sehen.
Quellen (genau eine aktiv)
- RS232: COM-Port oder pyserial-URL (z. B.
socket://host:port), Baudrate und Timeout einstellbar. Zeilentrenner LF oder CRLF. - CAN: jedes Interface, das python-can kennt (PCAN, SocketCAN, Vector, udp_multicast, ...). Die Datenbytes der Frames mit einer eingestellten Arbitration-ID werden als Bytestrom behandelt und in Zeilen zerlegt.
- CAN-Trace-Dateien: alles, was python-can lesen kann (.asc, .blf, ...), Wiedergabe mit 0,5x, 1x, 2x, 10x oder sofort, gleicher ID-Filter wie live.
Das Tool liest nur. Im Quell-Layer gibt es keinen einzigen send- oder write-Aufruf, ein Test erzwingt das. Auf CAN wird Listen-Only angefordert, wo der Treiber das kann.
Monitore mit und ohne Filter (der eigentliche Kern)
- Alle empfangenen Zeilen landen in einem Ringpuffer (Standard 5000 Zeilen). Darüber liegen beliebig viele Monitor-Ansichten.
- Monitor ohne Filter: zeigt den kompletten Strom.
- Monitor mit Filter: zeigt nur Zeilen, die einen Substring enthalten, z. B. "ERROR", "Achse3" oder "main()". Der Filter lässt sich pro Monitor abschalten, ohne ihn zu löschen. Jeder Monitor zeigt Zähler "passend / gesamt".
- Pause und Clear wirken nur auf die gewählte Ansicht. Der Puffer und die anderen Monitore laufen weiter. Nach dem Fortsetzen sind die zwischenzeitlich eingetroffenen Zeilen da, solange der Ringpuffer sie noch hält.
- Zeilen werden anhand konfigurierbarer Substrings als DEBUG, INFO, WARN, ERROR eingefärbt.
Weiteres
- Zeilentrennung passiert auf Byte-Ebene vor dem Dekodieren. UTF-8-Sequenzen, die über mehrere CAN-Frames verteilt ankommen, ergeben keine kaputten Zeilen; undekodierbare Bytes werden ersetzt statt verworfen.
- Optionales Mitschreiben auf Platte: Rohstrom und/oder eine Datei je Monitor, Dateiname mit strftime-Platzhaltern. Das schreibt ein eigener Thread, die GUI blockiert nicht.
- Konfiguration als JSON-Datei (
--config). Fehlende Schlüssel werden ergänzt, eine kaputte Datei wird nie ungefragt überschrieben.
Geplant, aber noch nicht implementiert
- Regex-Filter für die Monitore, zusätzlich zum heutigen Substring-Filter.
- Automatische Baudratenerkennung für RS232. Heute muss die Baudrate von Hand eingestellt werden.
Beides steht auf der Liste, in Version 0.2.0 ist davon nichts drin.
Abgrenzung und Technik
Was es nicht ist: kein Terminal (HTerm, ScriptCommunicator), kein CAN-Analyzer. Es sendet nichts, macht keine Signaldekodierung. Nur Textlogs mitlesen, mehrere Sichten gleichzeitig.
Technik: Python >= 3.10, PySide6, python-can, pyserial. MIT-Lizenz. Entwickelt und getestet unter Windows. Linux sollte über pyserial/SocketCAN laufen, ist aber ungetestet.
Quellcode und Installation
Das Paket liegt auf PyPI: https://pypi.org/project/machine-log-monitor/
Nur den Quellcode anschauen, ohne etwas zu installieren: Unter https://pypi.org/project/machine-log-monitor/#files liegt das Quellpaket machine_log_monitor-0.2.0.tar.gz [Größe nach dem Upload eintragen, 0.1.1 hatte ca. 730 kB]. Darin steckt der komplette Python-Quellcode des Programms plus Tests (pytest), README, LICENSE und CHANGELOG. Einfach entpacken und lesen. Alternativ per pip herunterladen, ohne zu installieren:
1 |
|
Als Anwendung installieren (empfohlen pipx, eigene Umgebung, Kommando landet im PATH):
1 |
|
2 |
|
Oder klassisch mit pip, am besten in ein venv:
1 |
|
2 |
|
3 |
|
4 |
|
Update: pipx upgrade machine-log-monitor bzw. pip install -U machine-log-monitor
Entfernen: pipx uninstall machine-log-monitor bzw. pip uninstall machine-log-monitor
Das Entwicklungs-Repository ist privat; Doku und der Log-Generator für Tests ohne Hardware sind daher aktuell nicht öffentlich. Das Quellpaket enthält keine EXE und keinen vorkompilierten Code: nur den Python-Quelltext des Programms plus die Ressourcen der Oberfläche (Icons als SVG und PNG, zwei Schriften, deren Lizenztexte).
Stand
Version 0.2.0, veröffentlicht am 03.10.2026. Neu gegenüber 0.1.1: Das RS232-Portfeld listet die erkannten seriellen Ports mit Beschreibung (unter Linux auch die festen /dev/serial/by-id-Namen), ein konfigurierter, aber nicht vorhandener Port wird gemeldet statt still zu scheitern, die Seitenleiste lässt sich einklappen, das Fenster geht bis 560 × 400 herunter, und die Log-Datei-Seite zeigt genau die Dateien, die wirklich geschrieben werden. Ich nutze es im Alltag, Ecken gibt es sicher.
Über Rückmeldungen freue ich mich:
- Wer liest heute Textlogs über RS232 oder CAN mit, und womit? Was müsste das Tool können, damit ihr es statt eures Terminals aufmacht?
- Kritik, Wünsche und Bugs gern direkt hier in den Thread.





