Open In App
Related Articles

Python | Add Logging to Python Libraries

Improve Article
Save Article
Like Article

In this article, we will learn how to add a logging capability to a library, but don’t want it to interfere with programs that don’t use logging. For libraries that want to perform logging, create a dedicated logger object, and initially configure it as shown in the code below – Code #1 : 


import logging
log = logging.getLogger(__name__)
# Example function (for testing)
def func():
    log.critical('A Critical Error !')
    log.debug('A debug message')

With this configuration, no logging will occur by default. 


import somelib

Output : 


If the logging system gets configured, log messages will start to appear. Code #2: 


import logging

Output :

CRITICAL:somelib:A Critical Error!

How does it work ?

  • Libraries present a special problem for logging, since information about the environment in which they are used isn’t known.
  • As a general rule, never write library code that tries to configure the logging system on its own or which makes assumptions about an already existing logging configuration.
  • Thus, one needs to take great care to provide isolation.
  • The call to getLogger(__name__) creates a logger module that has the same name as the calling module.
  • Since all modules are unique, this creates a dedicated logger that is likely to be separate from other loggers.
  • The log.addHandler(logging.NullHandler()) operation attaches a null handler to the just created logger object. A null handler ignores all logging messages by default.
  • Thus, if the library is used and logging is never configured, no messages or warnings will appear.

Logging of individual libraries can be independently configured, regardless of other logging settings as shown in the code given below – Code #3: 


import logging

logging.basicConfig(level = logging.ERROR)

import abc
print (abc.func())

Change the logging level for ‘abc’ only
logging.getLogger(‘abc’).level = logging.DEBUG
print (abc.func())

Output : 

CRITICAL:abc:A Critical Error!
DEBUG:abc:A debug message

The time complexity of the code is constant time O(1) as there are no loops or iterations.

The space complexity of the code is also constant space O(1) as the amount of memory used does not increase with the size of the input.

Whether you're preparing for your first job interview or aiming to upskill in this ever-evolving tech landscape, GeeksforGeeks Courses are your key to success. We provide top-quality content at affordable prices, all geared towards accelerating your growth in a time-bound manner. Join the millions we've already empowered, and we're here to do the same for you. Don't miss out - check it out now!

Last Updated : 23 Feb, 2023
Like Article
Save Article
Similar Reads
Related Tutorials