Skip to content

Instantly share code, notes, and snippets.

@jonepl
Created December 2, 2021 01:19
Show Gist options
  • Save jonepl/925120749434c1c83e5de8096a79adb1 to your computer and use it in GitHub Desktop.
Save jonepl/925120749434c1c83e5de8096a79adb1 to your computer and use it in GitHub Desktop.
Basics on logging in Python

Log Levels

  • Notset = 0: This is the initial default setting of a log when it is created. It is not really relevant and most developers will not even take notice of this category. In many circles, it has already become nonessential. The root log is usually created with level WARNING.
  • Debug = 10: This level gives detailed information, useful only when a problem is being diagnosed.
  • Info = 20: This is used to confirm that everything is working as it should.
  • Warning = 30: This level indicates that something unexpected has happened or some problem is about to happen in the near future.
  • Error = 40: As it implies, an error has occurred. The software was unable to perform some function.
  • Critical = 50: A serious error has occurred. The program itself may shut down or not be able to continue running properly.

Usage

Simple Usage

# Importing your logger
import logging

# OPTIONAL: Configure the root logger to output to file, set debug level to DEBUG, set output format
logging.basisConfig(filename='test.log', level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s')

# Utilizes the root logger to log info a message
logging.info(f'Your log message {prop}')

In Depth Usage

# Importing your logger
import logging


APP_LOGGER_NAME = 'MyAwesomeApp'

# Create a unique child logger for the module 
logger = logging.getLogger(__name__)

# Sets log level to unique child logger
logger.setLevel(logging.INFO)

# Creates formatter for unique child logger
formatter = logging.Formatter('%(asctime)s:%(levelname)s:%(message)s')

# Creates file handler for unique child logger
file_handler = logging.FileHandler('employee.log')
# Sets formatter to unique child logger
file_handler.setFormatter(formatter)


stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)

# Adds file handler to unique logger
logger.addHandler(file_handler)

# Configure the root logger to output to file, set debug level to DEBUG, set output format
logging.basisConfig(filename='test.log', level=logging.DEBUG, format='%(asctime)s:%(levelname)s:%(message)s')
def setup_applevel_logger(logger_name = APP_LOGGER_NAME, file_name=None): 

    logger = logging.getLogger(__name__)
    logger.setLevel(logging.DEBUG)
    formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
    sh = logging.StreamHandler(sys.stdout)
    sh.setFormatter(formatter)
    logger.handlers.clear()
    logger.addHandler(sh)

    if file_name:
        fh = logging.FileHandler(file_name)
        fh.setFormatter(formatter)
        logger.addHandler(fh)

    return logger

def get_logger(module_name):    
   return logging.getLogger(APP_LOGGER_NAME).getChild(module_name)

Documentation

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment