import logging import sys import pytest import logzero from logzero import logger as log from slic.utils.logcfg import add_log_Level, logcfg from slic.utils.logign import ignore_log_msg # Parametrize main test: filtering by level and message @pytest.mark.parametrize("levelname,msg_to_ignore,msg_to_keep", [ ("WARNING", "This should be ignored", "This should appear"), ("ENLARGE", "ENLARGE this", "Keep this ENLARGE"), ]) def test_ignore_log_msg_behavior(levelname, msg_to_ignore, msg_to_keep, capsys): for h in log.handlers[:]: log.removeHandler(h) handler = logging.StreamHandler(sys.stderr) formatter = logzero.LogFormatter() handler.setFormatter(formatter) log.addHandler(handler) add_log_Level(log, "ENLARGE", logging.INFO + 6, func_name="enlarge") logcfg("DEBUG") capsys.readouterr() with ignore_log_msg(log, lvl=levelname, msg=msg_to_ignore): if levelname == "WARNING": log.warning(msg_to_ignore) log.warning(msg_to_keep) elif levelname == "ENLARGE": log.enlarge(msg_to_ignore) log.enlarge(msg_to_keep) captured = capsys.readouterr().err assert msg_to_ignore not in captured assert msg_to_keep in captured # Filter by level only (msg=None) def test_ignore_only_by_level(capsys): for h in log.handlers[:]: log.removeHandler(h) handler = logging.StreamHandler(sys.stderr) handler.setFormatter(logzero.LogFormatter()) log.addHandler(handler) logcfg("DEBUG") capsys.readouterr() with ignore_log_msg(log, lvl="WARNING", msg=None): log.warning("Should be hidden") log.info("Should be visible") captured = capsys.readouterr().err assert "Should be hidden" not in captured assert "Should be visible" in captured # Filter by message only (lvl=None) def test_ignore_only_by_msg(capsys): for h in log.handlers[:]: log.removeHandler(h) handler = logging.StreamHandler(sys.stderr) handler.setFormatter(logzero.LogFormatter()) log.addHandler(handler) logcfg("DEBUG") capsys.readouterr() with ignore_log_msg(log, lvl=None, msg="skip this"): log.warning("skip this") log.warning("keep this") captured = capsys.readouterr().err assert "skip this" not in captured assert "keep this" in captured # Filter removed after context def test_filter_removed_after_context(capsys): for h in log.handlers[:]: log.removeHandler(h) handler = logging.StreamHandler(sys.stderr) handler.setFormatter(logzero.LogFormatter()) log.addHandler(handler) logcfg("DEBUG") capsys.readouterr() with ignore_log_msg(log, lvl="WARNING", msg="temp msg"): log.warning("temp msg") # should be ignored log.warning("temp msg") # should now appear captured = capsys.readouterr().err assert "temp msg" in captured count = captured.count("temp msg") assert count == 1, f"'temp msg' should appear exactly once, found {count}"