logger.py 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. #
  2. # Module supporting logging
  3. #
  4. # processing/logger.py
  5. #
  6. # Copyright (c) 2006-2008, R Oudkerk --- see COPYING.txt
  7. #
  8. import sys
  9. __all__ = ['enableLogging', 'getLogger', 'subDebug',
  10. 'debug', 'info', 'subWarning']
  11. NOTSET = 0
  12. SUBDEBUG = 5
  13. DEBUG = 10
  14. INFO = 20
  15. SUBWARNING = 25
  16. DEFAULT_FORMAT = '[%(levelname)s/%(processName)s] %(message)s'
  17. _logger = None
  18. def subDebug(msg, *args):
  19. if _logger:
  20. _logger.log(SUBDEBUG, msg, *args)
  21. def debug(msg, *args):
  22. if _logger:
  23. _logger.log(DEBUG, msg, *args)
  24. def info(msg, *args):
  25. if _logger:
  26. _logger.log(INFO, msg, *args)
  27. def subWarning(msg, *args):
  28. if _logger:
  29. _logger.log(SUBWARNING, msg, *args)
  30. def getLogger():
  31. '''
  32. Returns logger used by processing
  33. '''
  34. return _logger
  35. def enableLogging(level, HandlerType=None, handlerArgs=(), format=None):
  36. '''
  37. Enable logging using `level` as the debug level
  38. '''
  39. global _logger
  40. import logging, atexit
  41. from processing import process
  42. logging._acquireLock()
  43. try:
  44. if _logger is None:
  45. temp = logging.getLogger('processing')
  46. temp._extra_args = (HandlerType, handlerArgs, format)
  47. _logger = temp
  48. _logger.propagate = 0
  49. def makeRecord(self, *args):
  50. record = self.__class__.makeRecord(self, *args)
  51. record.processName = process.currentProcess()._name
  52. return record
  53. MethodType = type(_logger.log)
  54. _logger.makeRecord = MethodType(makeRecord, _logger)
  55. logging.addLevelName(SUBDEBUG, 'SUBDEBUG')
  56. logging.addLevelName(SUBWARNING, 'SUBWARNING')
  57. # cleanup func of `processing` should run before that of `logging`
  58. atexit._exithandlers.remove((process._exitFunction, (), {}))
  59. atexit._exithandlers.append((process._exitFunction, (), {}))
  60. HandlerType = HandlerType or logging.StreamHandler
  61. if HandlerType:
  62. format = format or DEFAULT_FORMAT
  63. handler = HandlerType(*handlerArgs)
  64. handler.setFormatter(logging.Formatter(format))
  65. _logger.handlers = [handler] # overwrites any old handler
  66. _logger.setLevel(level)
  67. _logger._extra_args = (HandlerType, handlerArgs, format)
  68. else:
  69. _logger.setLevel(level)
  70. finally:
  71. logging._releaseLock()