Fix Logger.setLevel crash: use a logging.Filter to drop Image noise

Logger.setLevel('Image', 'CRITICAL') raised TypeError (takes 1 arg) and
crash-looped the player. Kivy routes all modules through the single 'kivy'
logger and the "[Image]" tag is just message-prefix formatting, so install a
logging.Filter on the 'kivy' logger that drops only
"Image: Error loading ..." records (benign: emitted by Video's inherited Image
loader) while keeping all other Kivy log records.
This commit is contained in:
SKE087
2026-10-15 00:15:24 +03:00
parent c599ad6321
commit 6df74806e4
+15 -2
View File
@@ -63,8 +63,21 @@ from kivy.logger import Logger
# Kivy's Video widget subclasses Image, so its inherited image loader always
# runs first and logs a harmless "Image: Error loading <file.mp4>" for every
# video (the real decoding is done by the ffpyplayer CoreVideo provider).
# Silence just that logger so genuine errors stay visible.
Logger.setLevel('Image', 'CRITICAL')
# Kivy routes every module through the single 'kivy' logger (the "[Image]" tag
# is just Kivy's message-prefix formatting), so drop only that one message and
# leave all other Kivy log records visible.
import logging
class _SuppressKivyImageNoise(logging.Filter):
def filter(self, record):
try:
return not record.getMessage().startswith('Image: Error loading')
except Exception:
return True
logging.getLogger('kivy').addFilter(_SuppressKivyImageNoise())
# Try to import evdev for card reader support (after Logger is available)
try: