logging.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import logging, logging.handlers
  2. class GAEHandler(logging.Handler):
  3. """
  4. Logging handler for GAE DataStore
  5. """
  6. def emit(self, record):
  7. from google.appengine.ext import db
  8. class Log(db.Model):
  9. name = db.StringProperty()
  10. level = db.StringProperty()
  11. module = db.StringProperty()
  12. func_name = db.StringProperty()
  13. line_no = db.IntegerProperty()
  14. thread = db.IntegerProperty()
  15. thread_name = db.StringProperty()
  16. process = db.IntegerProperty()
  17. message = db.StringProperty(multiline=True)
  18. args = db.StringProperty(multiline=True)
  19. date = db.DateTimeProperty(auto_now_add=True)
  20. log = Log()
  21. log.name = record.name
  22. log.level = record.levelname
  23. log.module = record.module
  24. log.func_name = record.funcName
  25. log.line_no = record.lineno
  26. log.thread = record.thread
  27. log.thread_name = record.threadName
  28. log.process = record.process
  29. log.message = record.msg
  30. log.args = str(record.args)
  31. log.put()
  32. def get_configured_logger(name):
  33. logger = logging.getLogger(name)
  34. if (len(logger.handlers) == 0):
  35. # This logger has no handlers, so we can assume it hasn't yet been configured
  36. # (Configure logger)
  37. # Create default handler
  38. if request.env.web2py_runtime_gae:
  39. # Create GAEHandler
  40. handler = GAEHandler()
  41. else:
  42. # Create RotatingFileHandler
  43. import os
  44. formatter="%(asctime)s %(levelname)s %(process)s %(thread)s %(funcName)s():%(lineno)d %(message)s"
  45. handler = logging.handlers.RotatingFileHandler(os.path.join(request.folder,'private/app.log'),maxBytes=4028,backupCount=2)
  46. handler.setFormatter(logging.Formatter(formatter))
  47. handler.setLevel(logging.DEBUG)
  48. logger.addHandler(handler)
  49. logger.setLevel(logging.DEBUG)
  50. # Test entry:
  51. #logger.debug(name + ' logger created')
  52. else:
  53. # Test entry:
  54. #logger.debug(name + ' already exists')
  55. pass
  56. return logger
  57. # Assign application logger to a global var
  58. logger = get_configured_logger(request.application)