djangologgingnosetests

Set the logging level on the root logger in Django tests


I have the following config (based on this):

'loggers': {
    'django': {
        'handlers': ['console'],
        'level': 'INFO',
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO',
    },
},

When I run my tests like this (Django 1.8.4)

./manage.py test

I get DEBUG-level output from a source line in my own code that looks like

import logging
logging.debug("Shouldn't be seen, but is")

The line indicates the log message is going to the root logger, as I would expect:

DEBUG:root:blah: Shouldn't be seen, but is

As the tests are running it says

nosetests --verbosity=1

If I say

./manage.py test --verbosity=0

that nosetests message goes away, but the debug logging does not.

What is happening? Is my logging config wrong? Is nosetests interfering? Django?

I think my logging config is being read. I suppressed a django.request WARNING by configuring that logger in this config file.

How do I debug this?

(I read this related post, it didn't help.)


Solution

  • Your logger configuration is not written correctly. The 'root' configuration goes outside the 'loggers' part, like this:

    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'INFO',
    }
    

    Setting it up as this should work.