Two approaches to Logging when Unit Testing with Python Python allows logging to be used in several ways.  Can you review the relative merits of these two approaches to Logging when Unit Testing with Python?  Is one approach appropriate to specific circumstances?  What are those circumstances and how might each approach be improved?

Directly addressing the logger.

#!/usr/bin/env python
import logging
import unittest

class LoggingTest(unittest.TestCase):

    logging.basicConfig(level=logging.INFO)

    def test_logger(self):
        logging.info("logging.info test_logger")
        pass


Getting a logger by name

#!/usr/bin/env python
import logging
import unittest

class GetLoggerTest(unittest.TestCase):
    logger = logging.getLogger(__name__)
    logger.setLevel(logging.INFO)

    def test_logger(self):
        self.logger.info("self.logger.info test_logger")
        pass
According to the logging docs:


  The logger name hierarchy is analogous to the Python package hierarchy, and identical to it if you organise your loggers on a per-module basis using the recommended construction logging.getLogger(__name__). That’s because in a module, __name__ is the module’s name in the Python package namespace.


Based on my experience, I would say that you should always use logging.getLogger(__name__) for bigger projects, as it'll make logging modularization easier.

As your question is broad, I recommend you to read the Logging Cookbook, in this link, as it holds many important use cases in which you could optimize the way you use logging.

It's also possible to mix both cases in order to add a timestamp, in example, which is an improved way of using this module:

#!/usr/bin/env python
import logging
import unittest

class GetLoggerTest(unittest.TestCase):
    logger = logging.getLogger(__name__)
    logging.basicConfig(format = '%(asctime)s %(module)s %(levelname)s: %(message)s',
                    datefmt = '%m/%d/%Y %I:%M:%S %p', level = logging.INFO)

    def test_logger(self):
        self.logger.info("self.logger.info test_logger")
        pass