/circuits/app/log.py

https://bitbucket.org/prologic/circuits/ · Python · 91 lines · 61 code · 24 blank · 6 comment · 11 complexity · b1817db96dcd417ed6f74839e5a86d1e MD5 · raw file

  1. # Module: logging
  2. # Date: 11th June 2006
  3. # Author: James Mills <prologic@shortcircuit.net.au>
  4. """Logging Components"""
  5. import sys
  6. import logging
  7. from logging import DEBUG, INFO, WARNING, WARN, ERROR, CRITICAL
  8. from circuits.core import handler, Event, BaseComponent
  9. class Log(Event):
  10. """Log Event"""
  11. channel = "log"
  12. target = "logger"
  13. class Logger(BaseComponent):
  14. channel = "logger"
  15. LEVELS = {"debug": DEBUG, "info": INFO, "warning": WARNING,
  16. "warn": WARN, "error": ERROR, "exception": ERROR,
  17. "critical": CRITICAL}
  18. def __init__(self, filename, name, type, level, channel=channel):
  19. super(Logger, self).__init__(channel=channel)
  20. self.logger = logging.getLogger(name)
  21. type = type.lower()
  22. if type == "file":
  23. hdlr = logging.FileHandler(filename)
  24. elif type in ["winlog", "eventlog", "nteventlog"]:
  25. # Requires win32 extensions
  26. hdlr = logging.handlers.NTEventLogHandler(name, type="Application")
  27. elif type in ["syslog", "unix"]:
  28. hdlr = logging.handlers.SysLogHandler("/dev/log")
  29. elif type in ["stderr"]:
  30. hdlr = logging.StreamHandler(sys.stderr)
  31. else:
  32. raise ValueError
  33. format = name + "[%(module)s] %(levelname)s: %(message)s"
  34. if type == "file":
  35. format = "%(asctime)s " + format
  36. dateFormat = ""
  37. level = level.upper()
  38. if level in ["DEBUG", "ALL"]:
  39. self.logger.setLevel(logging.DEBUG)
  40. dateFormat = "%X"
  41. elif level == "INFO":
  42. self.logger.setLevel(logging.INFO)
  43. elif level == "ERROR":
  44. self.logger.setLevel(logging.ERROR)
  45. elif level == "CRITICAL":
  46. self.logger.setLevel(logging.CRITICAL)
  47. else:
  48. self.logger.setLevel(logging.WARNING)
  49. formatter = logging.Formatter(format,dateFormat)
  50. hdlr.setFormatter(formatter)
  51. self.logger.addHandler(hdlr)
  52. @handler("log")
  53. def _on_log(self, level, msg, *args, **kwargs):
  54. self.logger.log(self.LEVELS[level.lower()], msg, *args, **kwargs)
  55. def debug(self, msg, *args, **kwargs):
  56. self.logger.debug(msg, *args, **kwargs)
  57. def info(self, msg, *args, **kwargs):
  58. self.logger.info(msg, *args, **kwargs)
  59. def warning(self, msg, *args, **kwargs):
  60. self.logger.warning(msg, *args, **kwargs)
  61. warn = warning
  62. def error(self, msg, *args, **kwargs):
  63. self.logger.error(msg, *args, **kwargs)
  64. def exception(self, msg, *args, **kwargs):
  65. self.logger.exception(msg, *args)
  66. def critical(self, msg, *args, **kwargs):
  67. self.logger.critical(msg, *args, **kwargs)