#! /usr/bin/env python3 """ selflogger.py Written by Geremy Condra Licensed under GPLv3 Released 27 May 2009 This module contains a simple exception designed to self-log. """ import logging import traceback class LoggingError(Exception): """Basic logging error""" # set the logging options filename = 'log' datefmt = '%a, %d %b %Y %H:%M:%S' format = '%(asctime)s %(levelname)-8s %(message)s' # build the logger logging.basicConfig(level=logging.DEBUG, filename=filename, datefmt=datefmt, format=format) # and get a local variable for it log = logging.getLogger('') def __init__(self, *args): # build the message from the user user_msg = args[0] if args else "An error has occurred" # get the traceback from the last error if it exists try: tb = traceback.format_exc() # otherwise, get the tb prior to this frame and pretend its us except: tb = "Traceback (most recent call last):\n" tb += ''.join(traceback.format_stack()[:-1]) tb += self.__class__.__name__ + ": " + user_msg tb += '\n' # build the complete log message log_msg = user_msg + "\n" + tb # and log it self.log.error(log_msg) # store the args self.args = args if __name__ == "__main__": # example 1: raise it all by itself raise LoggingError("AIEEE!") # example 2: using it to log a re-raise try: dict()[5] except: raise LoggingError