Guest User

Untitled

a guest
May 25th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. import os
  4. import codecs
  5. import time
  6.  
  7. class Logger:
  8. timeFormat = "%Y-%m-%d_%H-%M-%S"
  9. logLevels = ["error", "warn", "info", "debug"]
  10. class __impl:
  11. def __init__(self, directory=None, filename=None, level="info"):
  12. self.__logFile = self.createLogFile(directory, filename)
  13. self.setLogLevel(level)
  14.  
  15. def getId(self):
  16. return id(self)
  17.  
  18. def createLogFile(self, directory, filename):
  19. if not directory:
  20. directory = os.getcwd()
  21.  
  22. if not filename:
  23. filename = "%s.log" %time.strftime(Logger.timeFormat)
  24.  
  25. try:
  26. if not os.path.isdir(directory):
  27. os.mkdir(directory)
  28. fullpath = os.path.join(directory, filename)
  29. logFile = codecs.open(fullpath, "a", "utf-8")
  30. return logFile
  31. except Exception, e:
  32. errMsg = ""
  33. if (e.args):
  34. errMsg = repr(e.args)
  35. raise RuntimeError, "Unable to open log file: %s" %errMsg
  36.  
  37. def setLogLevel(self, level="info"):
  38. self.__logLevel = Logger.logLevels.index(level)
  39.  
  40. def log(self, msg, level=2):
  41. if level > self.__logLevel:
  42. return
  43.  
  44. timeStr = time.strftime(Logger.timeFormat)
  45. levelStr = Logger.logLevels[level].upper()
  46. out = "%s [%s] %s" %(timeStr, levelStr, msg)
  47. print out
  48. self.__logFile.write(out + "\n")
  49.  
  50. def debug(self, msg):
  51. self.log(msg, 3)
  52.  
  53. def info(self, msg):
  54. self.log(msg, 2)
  55.  
  56. def warn(self, msg):
  57. self.log(msg, 1)
  58.  
  59. def error(self, msg):
  60. self.log(msg, 0)
  61.  
  62. def logError(self, e):
  63. if type(e).__name__ == "str":
  64. self.error(e)
  65.  
  66. if e.__class__:
  67. msg = e.__class__.__name__
  68. if (e.args):
  69. msg += " %s" %repr(e.args)
  70. self.error(msg)
  71.  
  72. __inst = None
  73.  
  74. def __init__(self, directory=None, filename=None, level="info"):
  75. # Check whether we already have an instance
  76. if Logger.__inst is None:
  77. Logger.__inst = Logger.__impl(directory, filename, level)
  78.  
  79. # Store instance reference in the handle
  80. self.__dict__["_Logger__inst"] = Logger.__inst
  81.  
  82. # Delegate attribute getters/setters to instance
  83. def __getattr__(self, attr):
  84. return getattr(self.__inst, attr)
  85.  
  86. def __setattr__(self, attr, value):
  87. return setattr(self.__inst, attr, value)
Add Comment
Please, Sign In to add comment