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 –
# abc.py import logging log = logging.getLogger(__name__) log.addHandler(logging.NullHandler()) # 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 abc.func() |
Output :
NO OUTPUT
If the logging system gets configured, log messages will start to appear.
Code #2:
import logging logging.basicConfig() somelib.func() |
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
Recommended Posts:
- Logging in Python
- Python | Add Logging to a Python Script
- Python | Logging Test Output to a File
- Create an Exception Logging Decorator in Python
- Best Python libraries for Machine Learning
- Finding Mean, Median, Mode in Python without libraries
- Top 10 Python Libraries for Data Science in 2020
- Argparse VS Docopt VS Click - Comparing Python Command-Line Parsing Libraries
- Unicode Strings Passing to C Libraries
- Passing NULL-Terminated Strings to C Libraries
- Reusable piece of python functionality for wrapping arbitrary blocks of code : Python Context Managers
- Python - Read blob object in python using wand library
- MySQL-Connector-Python module in Python
- twitter-text-python (ttp) module - Python
- Reading Python File-Like Objects from C | Python
- Python | Convert list to Python array
- Python | Index of Non-Zero elements in Python list
- Python | PRAW - Python Reddit API Wrapper
- Important differences between Python 2.x and Python 3.x with examples
- Python | Merge Python key values to list
If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

