PageRenderTime 46ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/devserver/logger.py

http://github.com/dcramer/django-devserver
Python | 78 lines | 73 code | 5 blank | 0 comment | 0 complexity | 0f88d1d24c9d7505e1f1c95cfe8b29bc MD5 | raw file
Possible License(s): BSD-3-Clause
  1. import logging
  2. import sys
  3. import re
  4. import datetime
  5. from django.utils.encoding import smart_str
  6. from django.core.management.color import color_style
  7. from django.utils import termcolors
  8. _bash_colors = re.compile(r'\x1b\[[^m]*m')
  9. def strip_bash_colors(string):
  10. return _bash_colors.sub('', string)
  11. class GenericLogger(object):
  12. def __init__(self, module):
  13. self.module = module
  14. self.style = color_style()
  15. def log(self, message, *args, **kwargs):
  16. id = kwargs.pop('id', None)
  17. duration = kwargs.pop('duration', None)
  18. level = kwargs.pop('level', logging.INFO)
  19. tpl_bits = []
  20. if id:
  21. tpl_bits.append(self.style.SQL_FIELD('[%s/%s]' % (self.module.logger_name, id)))
  22. else:
  23. tpl_bits.append(self.style.SQL_FIELD('[%s]' % self.module.logger_name))
  24. if duration:
  25. tpl_bits.append(self.style.SQL_KEYWORD('(%dms)' % duration))
  26. if args:
  27. message = message % args
  28. message = smart_str(message)
  29. if level == logging.ERROR:
  30. message = self.style.ERROR(message)
  31. elif level == logging.WARN:
  32. message = self.style.NOTICE(message)
  33. else:
  34. try:
  35. HTTP_INFO = self.style.HTTP_INFO
  36. except:
  37. HTTP_INFO = termcolors.make_style(fg='red')
  38. message = HTTP_INFO(message)
  39. tpl = ' '.join(tpl_bits) % dict(
  40. id=id,
  41. module=self.module.logger_name,
  42. asctime=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
  43. )
  44. indent = ' ' * (len(strip_bash_colors(tpl)) + 1)
  45. new_message = []
  46. first = True
  47. for line in message.split('\n'):
  48. if first:
  49. new_message.append(line)
  50. else:
  51. new_message.append('%s%s' % (indent, line))
  52. first = False
  53. message = '%s %s' % (tpl, '\n'.join(new_message))
  54. sys.stdout.write(' ' + message + '\n')
  55. warn = lambda x, *a, **k: x.log(level=logging.WARN, *a, **k)
  56. info = lambda x, *a, **k: x.log(level=logging.INFO, *a, **k)
  57. debug = lambda x, *a, **k: x.log(level=logging.DEBUG, *a, **k)
  58. error = lambda x, *a, **k: x.log(level=logging.ERROR, *a, **k)
  59. critical = lambda x, *a, **k: x.log(level=logging.CRITICAL, *a, **k)
  60. fatal = lambda x, *a, **k: x.log(level=logging.FATAL, *a, **k)