log.py 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import logging
  2. import sys
  3. import time
  4. import boto3
  5. import watchtower
  6. from app.config import (
  7. AWS_ACCESS_KEY_ID,
  8. AWS_SECRET_ACCESS_KEY,
  9. AWS_REGION,
  10. CLOUDWATCH_LOG_GROUP,
  11. ENABLE_CLOUDWATCH,
  12. CLOUDWATCH_LOG_STREAM,
  13. )
  14. _log_format = "%(asctime)s - %(name)s - %(levelname)s - %(process)d - %(module)s:%(lineno)d - %(funcName)s - %(message)s"
  15. _log_formatter = logging.Formatter(_log_format)
  16. def _get_console_handler():
  17. console_handler = logging.StreamHandler(sys.stdout)
  18. console_handler.setFormatter(_log_formatter)
  19. console_handler.formatter.converter = time.gmtime
  20. return console_handler
  21. def _get_watchtower_handler():
  22. session = boto3.Session(
  23. aws_access_key_id=AWS_ACCESS_KEY_ID,
  24. aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
  25. region_name=AWS_REGION,
  26. )
  27. handler = watchtower.CloudWatchLogHandler(
  28. log_group=CLOUDWATCH_LOG_GROUP,
  29. stream_name=CLOUDWATCH_LOG_STREAM,
  30. send_interval=5, # every 5 sec
  31. boto3_session=session,
  32. )
  33. handler.setFormatter(_log_formatter)
  34. return handler
  35. def _get_logger(name):
  36. logger = logging.getLogger(name)
  37. logger.setLevel(logging.DEBUG)
  38. # leave the handlers level at NOTSET so the level checking is only handled by the logger
  39. logger.addHandler(_get_console_handler())
  40. if ENABLE_CLOUDWATCH:
  41. print(
  42. "enable cloudwatch, log group",
  43. CLOUDWATCH_LOG_GROUP,
  44. "; log stream:",
  45. CLOUDWATCH_LOG_STREAM,
  46. )
  47. logger.addHandler(_get_watchtower_handler())
  48. # no propagation to avoid propagating to root logger
  49. logger.propagate = False
  50. return logger
  51. print(f">>> init logging <<<")
  52. # Disable flask logs such as 127.0.0.1 - - [15/Feb/2013 10:52:22] "GET /index.html HTTP/1.1" 200
  53. log = logging.getLogger("werkzeug")
  54. log.disabled = True
  55. # Set some shortcuts
  56. logging.Logger.d = logging.Logger.debug
  57. logging.Logger.i = logging.Logger.info
  58. LOG = _get_logger("sl")