Skip to content

Instantly share code, notes, and snippets.

@tanelpuhu
Last active September 22, 2015 20:07
Show Gist options
  • Save tanelpuhu/324b186c299ad041084a to your computer and use it in GitHub Desktop.
Save tanelpuhu/324b186c299ad041084a to your computer and use it in GitHub Desktop.
like that??
2015-09-22 23:06:52,617 INFO info 1
2015-09-22 23:06:52,617 INFO level 1: info 2
2015-09-22 23:06:52,617 INFO level 1: info 3
2015-09-22 23:06:52,617 INFO level 1:level 2: info 3
2015-09-22 23:06:52,618 INFO level 1: test 4
2015-09-22 23:06:52,618 INFO test 5
2015-09-22 23:06:52,618 INFO before function
2015-09-22 23:06:52,618 INFO in-function-func: doing something....
2015-09-22 23:06:52,618 INFO after function
import logging
import contextlib
class PrefixLogger(logging.getLoggerClass()):
_prefix = []
@contextlib.contextmanager
def prefix_context(self, prefix):
self._prefix.append(prefix)
yield
self._prefix.pop()
def prefix_decorator(self, prefix):
def decorator(f):
def wrapper(*args, **kwargs):
with self.prefix_context(prefix):
return f(*args, **kwargs)
return f
return wrapper
return decorator
def handle(self, record):
if self._prefix:
record.msg = '{0}: {1}'.format(':'.join(self._prefix), record.msg)
super(PrefixLogger, self).handle(record)
logging.setLoggerClass(PrefixLogger)
def main():
logger = logging.getLogger('logger')
logger.setLevel(logging.DEBUG)
stream = logging.StreamHandler()
stream.setLevel(logging.DEBUG)
stream.setFormatter(logging.Formatter("%(asctime)s %(levelname)s %(message)s"))
logger.addHandler(stream)
logger.info('info 1')
with logger.prefix_context('level 1'):
logger.info('info 2')
logger.info('info 3')
with logger.prefix_context('level 2'):
logger.info('info 3')
logger.info('test 4')
logger.info('test 5')
@logger.prefix_decorator('in-function-func')
def func():
logger.info('doing something....')
logger.info('before function')
func()
logger.info('after function')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment