Last active
September 22, 2015 20:07
-
-
Save tanelpuhu/324b186c299ad041084a to your computer and use it in GitHub Desktop.
like that??
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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