log.py 2.1 KB

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