diff options
-rw-r--r-- | pysite/__init__.py | 14 | ||||
-rw-r--r-- | pysite/constants.py | 4 | ||||
-rw-r--r-- | pysite/logs.py | 11 | ||||
-rw-r--r-- | requirements.txt | 1 |
4 files changed, 28 insertions, 2 deletions
diff --git a/pysite/__init__.py b/pysite/__init__.py index f807eaf4..cc80b075 100644 --- a/pysite/__init__.py +++ b/pysite/__init__.py @@ -5,22 +5,32 @@ from logging import StreamHandler from logging.handlers import SysLogHandler import sys -from pysite.constants import PAPERTRAIL_ADDRESS, PAPERTRAIL_PORT +from logmatic import JsonFormatter + +from pysite.constants import DATADOG_ADDRESS, DATADOG_PORT, PAPERTRAIL_ADDRESS, PAPERTRAIL_PORT +from pysite.logs import NonPicklingSocketHandler # region Logging # Get the log level from environment + log_level = os.environ.get("LOG_LEVEL", "info").upper() if hasattr(logging, log_level): log_level = getattr(logging, log_level) else: - raise RuntimeError("LOG_LEVEL environment variable has an invalid value.") + raise RuntimeError(f"LOG_LEVEL environment variable has invalid value: {log_level}") logging_handlers = [] if PAPERTRAIL_ADDRESS: logging_handlers.append(SysLogHandler(address=(PAPERTRAIL_ADDRESS, PAPERTRAIL_PORT))) +if DATADOG_ADDRESS: + datadog_handler = NonPicklingSocketHandler(host=DATADOG_ADDRESS, port=DATADOG_PORT) + datadog_handler.formatter = JsonFormatter(datefmt="%b %d %H:%M:%S") + + logging_handlers.append(datadog_handler) + logging_handlers.append(StreamHandler(stream=sys.stderr)) logging.basicConfig( diff --git a/pysite/constants.py b/pysite/constants.py index d6ed489f..c84ca245 100644 --- a/pysite/constants.py +++ b/pysite/constants.py @@ -48,3 +48,7 @@ ERROR_DESCRIPTIONS = { # PaperTrail logging PAPERTRAIL_ADDRESS = os.environ.get("PAPERTRAIL_ADDRESS") or None PAPERTRAIL_PORT = int(os.environ.get("PAPERTRAIL_PORT") or 0) + +# DataDog logging +DATADOG_ADDRESS = os.environ.get("DATADOG_ADDRESS") or None +DATADOG_PORT = int(os.environ.get("DATADOG_PORT") or 0) diff --git a/pysite/logs.py b/pysite/logs.py new file mode 100644 index 00000000..301cb98b --- /dev/null +++ b/pysite/logs.py @@ -0,0 +1,11 @@ +# coding=utf-8 +from logging.handlers import SocketHandler + + +class NonPicklingSocketHandler(SocketHandler): + def emit(self, record): + try: + s = self.formatter.format(record).encode() + b"\n" + self.send(s) + except Exception: + self.handleError(record) diff --git a/requirements.txt b/requirements.txt index cc2dc0e9..138d02f0 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,3 +7,4 @@ wsaccel ujson schema flask_sockets +logmatic-python |