diff --git a/awx/conf/apps.py b/awx/conf/apps.py index 8f9980dde9..62ad0085df 100644 --- a/awx/conf/apps.py +++ b/awx/conf/apps.py @@ -15,5 +15,8 @@ class ConfConfig(AppConfig): self.module.autodiscover() from .settings import SettingsWrapper SettingsWrapper.initialize() - configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) + if settings.LOG_AGGREGATOR_ENABLED: + LOGGING = settings.LOGGING + LOGGING['handlers']['http_receiver']['class'] = 'awx.main.utils.handlers.HTTPSHandler' + configure_logging(settings.LOGGING_CONFIG, LOGGING) # checks.register(SettingsWrapper._check_settings) diff --git a/awx/main/conf.py b/awx/main/conf.py index 527f262334..1a4d7cb0ea 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -296,3 +296,12 @@ register( category=_('Logging'), category_slug='logging', ) +register( + 'LOG_AGGREGATOR_ENABLED', + field_class=fields.BooleanField, + default=False, + label=_('Flag denoting whether to use the external logger system'), + help_text=_('If not set, only normal settings data will be used to configure loggers.'), + category=_('Logging'), + category_slug='logging', +) diff --git a/awx/main/management/commands/run_socketio_service.py b/awx/main/management/commands/run_socketio_service.py index 6a6404f2b4..9b7e5a61d2 100644 --- a/awx/main/management/commands/run_socketio_service.py +++ b/awx/main/management/commands/run_socketio_service.py @@ -23,7 +23,7 @@ from socketio import socketio_manage from socketio.server import SocketIOServer from socketio.namespace import BaseNamespace -logger = logging.getLogger('awx.main.consumers') +logger = logging.getLogger('awx.main.commands.run_socketio_service') class SocketSession(object): diff --git a/awx/main/tasks.py b/awx/main/tasks.py index 4f6e647b0c..71d65df772 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -92,7 +92,12 @@ def clear_cache_keys(cache_keys): cache.delete_many(set_of_keys) for setting_key in set_of_keys: if setting_key.startswith('LOG_AGGREGATOR_'): - configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) + LOGGING = settings.LOGGING + if settings.LOG_AGGREGATOR_ENABLED: + LOGGING['handlers']['http_receiver']['class'] = 'awx.main.utils.handlers.HTTPSHandler' + else: + LOGGING['handlers']['http_receiver']['class'] = 'awx.main.utils.handlers.HTTPSNullHandler' + configure_logging(settings.LOGGING_CONFIG, LOGGING) break diff --git a/awx/main/utils/handlers.py b/awx/main/utils/handlers.py index 23f23c4d5e..28b7c26af7 100644 --- a/awx/main/utils/handlers.py +++ b/awx/main/utils/handlers.py @@ -14,6 +14,7 @@ from requests_futures.sessions import FuturesSession # custom from django.conf import settings as django_settings +from django.utils.log import NullHandler # AWX external logging handler, generally designed to be used # with the accompanying LogstashHandler, derives from python-logstash library @@ -36,6 +37,13 @@ def unused_callback(sess, resp): pass +class HTTPSNullHandler(NullHandler): + "Placeholder null handler to allow loading without database access" + + def __init__(self, host, **kwargs): + return super(HTTPSNullHandler, self).__init__() + + class HTTPSHandler(logging.Handler): def __init__(self, fqdn=False, **kwargs): super(HTTPSHandler, self).__init__() diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 1174de726e..ac193c1507 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -825,6 +825,8 @@ TOWER_URL_BASE = "https://towerhost" TOWER_SETTINGS_MANIFEST = {} +LOG_AGGREGATOR_ENABLED = False + # Logging configuration. LOGGING = { 'version': 1, @@ -869,7 +871,7 @@ LOGGING = { 'formatter': 'simple', }, 'http_receiver': { - 'class': 'awx.main.utils.handlers.HTTPSHandler', + 'class': 'awx.main.utils.handlers.HTTPSNullHandler', 'level': 'INFO', 'formatter': 'json', 'host': '',