From def379da8ce30121c804100bcf86246a97edd895 Mon Sep 17 00:00:00 2001 From: Brandon Squizzato Date: Thu, 30 Apr 2020 13:05:24 -0400 Subject: [PATCH] enabling stdout logs refactoring --- app/__init__.py | 3 +-- app/logging.py | 31 +++++++++++++++++++++---------- 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/app/__init__.py b/app/__init__.py index eb2bbe7d1..11999ea41 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -18,8 +18,6 @@ from app.validators import verify_uuid_format # noqa: 401 from tasks import init_tasks -logger = get_logger(__name__) - IDENTITY_HEADER = "x-rh-identity" REQUEST_ID_HEADER = "x-rh-insights-request-id" UNKNOWN_REQUEST_ID_VALUE = "-1" @@ -41,6 +39,7 @@ def create_app(config_name, start_tasks=False, start_payload_tracker=False): # This feels like a hack but it is needed. The logging configuration # needs to be setup before the flask app is initialized. configure_logging(config_name) + logger = get_logger(__name__) # we need to call the logger after configuring it, not before app_config = Config(RuntimeEnvironment.server) app_config.log_configuration(config_name) diff --git a/app/logging.py b/app/logging.py index 120d3566d..8279fb2cd 100644 --- a/app/logging.py +++ b/app/logging.py @@ -13,6 +13,8 @@ threadctx = local() +session_boto3 = None + def configure_logging(config_name): env_var_name = "INVENTORY_LOGGING_CONFIG_FILE" @@ -43,7 +45,6 @@ def _configure_watchtower_logging_handler(): aws_region_name = os.getenv("AWS_REGION_NAME", None) log_group = os.getenv("AWS_LOG_GROUP", "platform") stream_name = os.getenv("AWS_LOG_STREAM", _get_hostname()) # default to hostname - create_log_group = str(os.getenv("AWS_CREATE_LOG_GROUP")).lower() == "true" if all([aws_access_key_id, aws_secret_access_key, aws_region_name, stream_name]): print(f"Configuring watchtower logging (log_group={log_group}, stream_name={stream_name})") @@ -53,19 +54,24 @@ def _configure_watchtower_logging_handler(): region_name=aws_region_name, ) - root = logging.getLogger() - handler = watchtower.CloudWatchLogHandler( - boto3_session=boto3_session, - log_group=log_group, - stream_name=stream_name, - create_log_group=create_log_group - ) - handler.setFormatter(logstash_formatter.LogstashFormatterV1()) - root.addHandler(handler) + global session_boto3 + session_boto3 = boto3_session else: print("Unable to configure watchtower logging. Please verify watchtower logging configuration!") +def _get_cloudwatch_handler(): + global session_boto3 + group = os.getenv("AWS_LOG_GROUP", "platform") + stream = os.getenv("AWS_LOG_STREAM", _get_hostname()) + create_log_group = str(os.getenv("AWS_CREATE_LOG_GROUP")).lower() == "true" + handler = watchtower.CloudWatchLogHandler( + boto3_session=session_boto3, log_group=group, stream_name=stream, create_log_group=create_log_group + ) + handler.setFormatter(logstash_formatter.LogstashFormatterV1()) + return handler + + def _get_hostname(): return os.uname()[1] @@ -122,5 +128,10 @@ def get_logger(name): log_level = os.getenv("INVENTORY_LOG_LEVEL", "INFO").upper() logger = logging.getLogger(LOGGER_PREFIX + name) logger.addFilter(ContextualFilter()) + + global session_boto3 + if session_boto3 is not None: + logger.addHandler(_get_cloudwatch_handler()) + logger.setLevel(log_level) return logger