diff --git a/mediapreview/__main__.py b/mediapreview/__main__.py index 8a89c51..1447b03 100644 --- a/mediapreview/__main__.py +++ b/mediapreview/__main__.py @@ -32,15 +32,14 @@ from docopt import docopt from mediapreview.backends import dispatch from mediapreview.exceptions import PreviewError -from mediapreview.util.logformat import EmojiFormatter +from mediapreview.util.logformat import EmojiFormatter, quiet_vips_logging def _configure_logging() -> None: handler = logging.StreamHandler(sys.stderr) handler.setFormatter(EmojiFormatter()) logging.basicConfig(level=logging.INFO, handlers=[handler]) - # pyvips is chatty at INFO ("threadpool completed ..." per operation). - logging.getLogger("pyvips").setLevel(logging.WARNING) + quiet_vips_logging() def _oosetup(name: str) -> None: diff --git a/mediapreview/util/logformat.py b/mediapreview/util/logformat.py index 140d3cb..a3afaf6 100644 --- a/mediapreview/util/logformat.py +++ b/mediapreview/util/logformat.py @@ -31,3 +31,18 @@ class EmojiFormatter(logging.Formatter): def format(self, record: logging.LogRecord) -> str: return format_level_prefix(record.levelno) + record.getMessage() + + +def quiet_vips_logging() -> None: + """Silence libvips per-operation chatter without hiding deprecations. + + pyvips redirects every GLib message ("VIPS: threadpool completed ...") + onto the ``pyvips`` logger at INFO; cap that logger at WARNING. pyvips's + own diagnostics (e.g. deprecated-argument notices) are logged on the + ``pyvips.voperation`` child logger and stay at the default INFO. + + Opt-in: applications that want quiet vips output call this once during + their own logging setup. mediapreview never calls it on import. + """ + logging.getLogger("pyvips").setLevel(logging.WARNING) + logging.getLogger("pyvips.voperation").setLevel(logging.INFO) diff --git a/mediapreview/worker.py b/mediapreview/worker.py index 280a9ff..1d3f24a 100644 --- a/mediapreview/worker.py +++ b/mediapreview/worker.py @@ -40,7 +40,7 @@ except ImportError: # pragma: no cover - optional worker extra from mediapreview.backends import dispatch from mediapreview.exceptions import PreviewError from mediapreview.protocol import PreviewRequest, PreviewResponse -from mediapreview.util.logformat import format_level_prefix +from mediapreview.util.logformat import format_level_prefix, quiet_vips_logging logger = logging.getLogger(__name__) @@ -171,8 +171,7 @@ def main() -> None: handler = logging.StreamHandler(sys.stderr) handler.setFormatter(_WorkerLogFormatter()) logging.basicConfig(level=logging.INFO, handlers=[handler]) - # pyvips is chatty at INFO ("threadpool completed ..." per operation). - logging.getLogger("pyvips").setLevel(logging.WARNING) + quiet_vips_logging() # NOTE: standalone package no longer depends on cista config loading. # Consumers can load their own configuration before starting workers. if len(sys.argv) > 1: