How can I patch / mock logging.getlogger() How can I patch / mock logging.getlogger() python-3.x python-3.x

How can I patch / mock logging.getlogger()


You can use patch.object() on the actual logging object. that lets you verify that you're using the correct logger too:

logger = logging.getLogger('path.to.module.under.test')with mock.patch.object(logger, 'debug') as mock_debug:    run_code_under_test()    mock_debug.assert_called_once_with('Init')

Alternatively, if you're using Pytest, then it already has a fixture that captures logs for you:

def test_bar(caplog):    with caplog.at_level(logging.DEBUG):        run_code_under_test()    assert "Init" in caplog.text    # or, if you really need to check the log-level    assert caplog.records[-1].message == "Init"    assert caplog.records[-1].levelname == "DEBUG"

More info in the pytest docs on logging


Assuming log is a global variable in a module mymod, you want to mock the actual instance that getLogger returned, which is what invokes debug. Then, you can check if log.debug was called with the correct argument.

with mock.patch('mymod.log') as log_mock:    # test code    log_mock.debug.assert_called_with('Init')


I am late for this question but another of way to achieve it is:

@patch('package_name.module_name.log')def test_log_in_A(self, mocked_log):    a = A()    mocked_log.debug.assert_called_once_with('Init')