mocking a logging object
Diez B. Roggisch
deets at nospam.web.de
Mon Jun 2 13:34:29 CEST 2008
Peter Bengtsson wrote:
> In my unittest I want to override the logger of a working module so
> that it puts all logging messages in /tmp/test.log instead so that in
> my unittest I can inspect that it logs things correctly. Hopefully
> this "pseudo" code will explain my problem::
>>>> import logging, os
>>>> logging.basicConfig(filename='/tmp/real.log', level=logging.INFO)
>>>> logger = logging.getLogger('Real')
>>>> logger.info('Real stuff')
>>>> # do the monkey patching like the unit test does
>>>> logging.basicConfig(filename='/tmp/test.log', level=logging.INFO)
>>>> logger = logging.getLogger('Test')
>>>> logger.info('Test stuff')
> 'INFO:Real:Real stuff\nINFO:Test:Test stuff\n'
> How can I change what file the logger should write to?
You should simply attach a new handler to the logger in question that logs
the data into a stream/StringIO-object for later retrieval. Then remove
that handler after the test.
More information about the Python-list