Learning Resources
 

logging module


What if you wanted to have some debugging messages or important messages to be stored somewhere so that you can check whether your program has been running as you would expect it? How do you "store somewhere" these messages? This can be achieved using the logging module.

#!/usr/bin/python
# Filename: use_logging.py
import os, platform, logging
 
if platform.platform().startswith('Windows'):
    logging_file = os.path.join(os.getenv('HOMEDRIVE'), os.getenv('HOMEPATH'), 'test.log')
else:
    logging_file = os.path.join(os.getenv('HOME'), 'test.log')
 
print("Logging to", logging_file)
 
logging.basicConfig(
    level=logging.DEBUG,
    format='%(asctime)s : %(levelname)s : %(message)s',
    filename = logging_file,
    filemode = 'w',
)
 
logging.debug("Start of the program")
logging.info("Doing something")
logging.warning("Dying now")

Output:

   $python use_logging.py
   Logging to C:\Users\swaroop\test.log

If we check the contents of test.log, it will look something like this:

   2008-09-03 13:18:16,233 : DEBUG : Start of the program
   2008-09-03 13:18:16,233 : INFO : Doing something
   2008-09-03 13:18:16,233 : WARNING : Dying now

How It Works:

We use three modules from the standard library - the os module for interacting with the operating system, the platform module for information about the platform i.e. the operating system and the logging module to log information.

First, we check which operating system we are using by checking the string returned by platform.platform() (for more information, see import platform; help(platform)). If it is Windows, we figure out the home drive, the home folder and the filename where we want to store the information. Putting these three parts together, we get the full location of the file. For other platforms, we need to know just the home folder of the user and we get the full location of the file.

We use the os.path.join() function to put these three parts of the location together. The reason to use a special function rather than just adding the strings together is because this function will ensure the full location matches the format expected by the operating system.

We configure the logging module to write all the messages in a particular format to the file we have specified.

Finally, we can put messages that are either meant for debugging, information, warning or even critical messages. Once the program has run, we can check this file and we will know what happened in the program, even though no information was displayed to the user running the program.

-Swaroopch