100 lines
2.3 KiB

  1. # Copyright (c) 2003, The Regents of the University of California,
  2. # through Lawrence Berkeley National Laboratory (subject to receipt of
  3. # any required approvals from the U.S. Dept. of Energy). All rights
  4. # reserved.
  5. #
  6. """Logging"""
  7. ident = "$Id$"
  8. import sys
  9. WARN = 1
  10. DEBUG = 2
  11. class ILogger:
  12. '''Logger interface, by default this class
  13. will be used and logging calls are no-ops.
  14. '''
  15. level = 0
  16. def __init__(self, msg):
  17. return
  18. def warning(self, *args):
  19. return
  20. def debug(self, *args):
  21. return
  22. def error(self, *args):
  23. return
  24. def setLevel(cls, level):
  25. cls.level = level
  26. setLevel = classmethod(setLevel)
  27. debugOn = lambda self: self.level >= DEBUG
  28. warnOn = lambda self: self.level >= WARN
  29. class BasicLogger(ILogger):
  30. def __init__(self, msg, out=sys.stdout):
  31. self.msg, self.out = msg, out
  32. def warning(self, msg, *args):
  33. if self.warnOn() is False: return
  34. print >>self, BasicLogger.WARN, self.msg,
  35. print >>self, msg %args
  36. WARN = 'WARN'
  37. def debug(self, msg, *args):
  38. if self.debugOn() is False: return
  39. print >>self, BasicLogger.DEBUG, self.msg,
  40. print >>self, msg %args
  41. DEBUG = 'DEBUG'
  42. def error(self, msg, *args):
  43. print >>self, BasicLogger.ERROR, self.msg,
  44. print >>self, msg %args
  45. ERROR = 'ERROR'
  46. def write(self, *args):
  47. '''Write convenience function; writes strings.
  48. '''
  49. for s in args: self.out.write(s)
  50. _LoggerClass = BasicLogger
  51. def setBasicLogger():
  52. '''Use Basic Logger.
  53. '''
  54. setLoggerClass(BasicLogger)
  55. BasicLogger.setLevel(0)
  56. def setBasicLoggerWARN():
  57. '''Use Basic Logger.
  58. '''
  59. setLoggerClass(BasicLogger)
  60. BasicLogger.setLevel(WARN)
  61. def setBasicLoggerDEBUG():
  62. '''Use Basic Logger.
  63. '''
  64. setLoggerClass(BasicLogger)
  65. BasicLogger.setLevel(DEBUG)
  66. def setLoggerClass(loggingClass):
  67. '''Set Logging Class.
  68. '''
  69. assert issubclass(loggingClass, ILogger), 'loggingClass must subclass ILogger'
  70. global _LoggerClass
  71. _LoggerClass = loggingClass
  72. def setLevel(level=0):
  73. '''Set Global Logging Level.
  74. '''
  75. ILogger.level = level
  76. def getLevel():
  77. return ILogger.level
  78. def getLogger(msg):
  79. '''Return instance of Logging class.
  80. '''
  81. return _LoggerClass(msg)