From a076e84a335c424d1a13b308509cdb27616b90a5 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Tue, 1 Oct 2019 15:18:22 -0400 Subject: [PATCH] add a settings flag for writing all external logs to disk --- awx/main/conf.py | 10 ++++++++++ awx/main/utils/handlers.py | 15 +++++++++++++++ awx/settings/defaults.py | 2 ++ 3 files changed, 27 insertions(+) diff --git a/awx/main/conf.py b/awx/main/conf.py index b0284a70ea..09e94485db 100644 --- a/awx/main/conf.py +++ b/awx/main/conf.py @@ -749,6 +749,16 @@ register( category=_('Logging'), category_slug='logging', ) +register( + 'LOG_AGGREGATOR_AUDIT', + field_class=fields.BooleanField, + allow_null=True, + default=False, + label=_('Enabled external log aggregation auditing'), + help_text=_('When enabled, all external logs emitted by Tower will also be written to /var/log/tower/external.log'), + category=_('Logging'), + category_slug='logging', +) register( diff --git a/awx/main/utils/handlers.py b/awx/main/utils/handlers.py index dae0de8e79..249c16a119 100644 --- a/awx/main/utils/handlers.py +++ b/awx/main/utils/handlers.py @@ -294,6 +294,18 @@ class AWXProxyHandler(logging.Handler): super(AWXProxyHandler, self).__init__(**kwargs) self._handler = None self._old_kwargs = {} + self._auditor = logging.handlers.RotatingFileHandler( + filename='/var/log/tower/external.log', + maxBytes=1024 * 1024 * 50, # 50 MB + backupCount=5, + ) + + class WritableLogstashFormatter(LogstashFormatter): + @classmethod + def serialize(cls, message): + return json.dumps(message) + + self._auditor.setFormatter(WritableLogstashFormatter()) def get_handler_class(self, protocol): return HANDLER_MAPPING.get(protocol, AWXNullHandler) @@ -327,6 +339,9 @@ class AWXProxyHandler(logging.Handler): def emit(self, record): if AWXProxyHandler.thread_local.enabled: actual_handler = self.get_handler() + if settings.LOG_AGGREGATOR_AUDIT: + self._auditor.setLevel(settings.LOG_AGGREGATOR_LEVEL) + self._auditor.emit(record) return actual_handler.emit(record) def perform_test(self, custom_settings): diff --git a/awx/settings/defaults.py b/awx/settings/defaults.py index 8d8ba9f008..574aec0d54 100644 --- a/awx/settings/defaults.py +++ b/awx/settings/defaults.py @@ -1226,6 +1226,8 @@ LOGGING = { }, } } +LOG_AGGREGATOR_AUDIT = False + # Apply coloring to messages logged to the console COLOR_LOGS = False