This post is only a compilation from others posts that i read for create a log decorator.
Firstly, we need to configure a log properly, an good example can be found here
import logging logger = logging.getLogger('decorator-log') logger.setLevel(logging.DEBUG) # create console handler and set level to debug ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) # create formatter formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') # add formatter to ch ch.setFormatter(formatter) # add ch to logger logger.addHandler(ch) Once log instance is configured, we create decorator using it.
import functools class LogDecorator(object): def __init__(self): self.logger = logging.getLogger('decorator-log') def __call__(self, fn): @functools.wraps(fn) def decorated(*args, **kwargs): try: self.logger.debug("{0} - {1} - {2}".format(fn.__name__, args, kwargs)) result = fn(*args, **kwargs) self.logger.debug(result) return result except Exception as ex: self.logger.debug("Exception {0}".format(ex)) raise ex return result return decorated It's almost done, we need to decorate some functions to test it:
## Start example @LogDecorator() def func(a, b, c): return a + b + c @LogDecorator() def crash(a,b): raise ValueError(str(a)) func(1,2,3) try: crash(1,3) except: pass Our output will be:
2018-12-04 23:37:44,110 - decorator-log - DEBUG - func - (1, 2, 3) - {} 2018-12-04 23:37:44,110 - decorator-log - DEBUG - 6 2018-12-04 23:37:44,110 - decorator-log - DEBUG - crash - (1, 3) - {} 2018-12-04 23:37:44,110 - decorator-log - DEBUG - Exception 1
Top comments (0)