From d73b082471d679196c07255f24981823846086a6 Mon Sep 17 00:00:00 2001 From: dandds Date: Mon, 1 Apr 2019 12:34:53 -0400 Subject: [PATCH] configurable json logging for atst app --- atst/app.py | 25 +++++++++++++++++++++++++ atst/utils/logging.py | 11 ++++++----- config/base.ini | 1 + 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/atst/app.py b/atst/app.py index adf018ed..13c801f8 100644 --- a/atst/app.py +++ b/atst/app.py @@ -29,11 +29,16 @@ from atst.utils.form_cache import FormCache from atst.utils.json import CustomJSONEncoder from atst.queue import queue +from logging.config import dictConfig +from atst.utils.logging import JsonFormatter, RequestContextFilter + ENV = os.getenv("FLASK_ENV", "dev") def make_app(config): + if ENV == "prod" or config.get("LOG_JSON"): + apply_json_logger() parent_dir = Path().parent @@ -143,6 +148,7 @@ def map_config(config): "RQ_QUEUES": [config["default"]["RQ_QUEUES"]], "DISABLE_CRL_CHECK": config.getboolean("default", "DISABLE_CRL_CHECK"), "CRL_FAIL_OPEN": config.getboolean("default", "CRL_FAIL_OPEN"), + "LOG_JSON": config.getboolean("default", "LOG_JSON"), } @@ -228,3 +234,22 @@ def make_mailer(app): ) sender = app.config.get("MAIL_SENDER") app.mailer = mailer.Mailer(mailer_connection, sender) + + +def apply_json_logger(): + dictConfig( + { + "version": 1, + "formatters": {"default": {"()": lambda *a, **k: JsonFormatter()}}, + "filters": {"requests": {"()": lambda *a, **k: RequestContextFilter()}}, + "handlers": { + "wsgi": { + "class": "logging.StreamHandler", + "stream": "ext://flask.logging.wsgi_errors_stream", + "formatter": "default", + "filters": ["requests"], + } + }, + "root": {"level": "INFO", "handlers": ["wsgi"]}, + } + ) diff --git a/atst/utils/logging.py b/atst/utils/logging.py index 9c165610..1ef84d0a 100644 --- a/atst/utils/logging.py +++ b/atst/utils/logging.py @@ -2,16 +2,17 @@ import datetime import json import logging -from flask import g, request +from flask import g, request, has_request_context class RequestContextFilter(logging.Filter): def filter(self, record): - if getattr(g, "current_user", None): - record.user_id = str(g.current_user.id) + if has_request_context(): + if getattr(g, "current_user", None): + record.user_id = str(g.current_user.id) - if request.environ.get("HTTP_X_REQUEST_ID"): - record.request_id = request.environ.get("HTTP_X_REQUEST_ID") + if request.environ.get("HTTP_X_REQUEST_ID"): + record.request_id = request.environ.get("HTTP_X_REQUEST_ID") return True diff --git a/config/base.ini b/config/base.ini index 37f5df0a..7e41e672 100644 --- a/config/base.ini +++ b/config/base.ini @@ -10,6 +10,7 @@ DISABLE_CRL_CHECK = false CRL_FAIL_OPEN = false DEBUG = true ENVIRONMENT = dev +LOG_JSON = false PERMANENT_SESSION_LIFETIME = 600 PE_NUMBER_CSV_URL = http://c95e1ebb198426ee57b8-174bb05a294821bedbf46b6384fe9b1f.r31.cf5.rackcdn.com/penumbers.csv PGAPPNAME = atst