From a1322abb0d984d4a34ace702781ed532da7e1857 Mon Sep 17 00:00:00 2001 From: alangsto <46360176+alangsto@users.noreply.github.com> Date: Thu, 15 Dec 2022 09:17:12 -0500 Subject: [PATCH] fix: update docker logger settings to better match normal log settings (#31448) * fix: update docker logger settings to better match normal log settings * feat: add docker-production settings for cms --- cms/envs/docker-production.py | 9 +++ lms/envs/docker-production.py | 89 +--------------------------- openedx/core/lib/logsettings.py | 100 ++++++++++++++++++++++++++++++++ 3 files changed, 110 insertions(+), 88 deletions(-) create mode 100644 cms/envs/docker-production.py diff --git a/cms/envs/docker-production.py b/cms/envs/docker-production.py new file mode 100644 index 0000000000..17a8b7c71f --- /dev/null +++ b/cms/envs/docker-production.py @@ -0,0 +1,9 @@ +""" +Specific overrides to the base prod settings for a docker production deployment. +""" + +from .production import * # pylint: disable=wildcard-import, unused-wildcard-import + +from openedx.core.lib.logsettings import get_docker_logger_config + +LOGGING = get_docker_logger_config() diff --git a/lms/envs/docker-production.py b/lms/envs/docker-production.py index 82a3740810..17a8b7c71f 100644 --- a/lms/envs/docker-production.py +++ b/lms/envs/docker-production.py @@ -2,95 +2,8 @@ Specific overrides to the base prod settings for a docker production deployment. """ -import platform from .production import * # pylint: disable=wildcard-import, unused-wildcard-import - -def get_docker_logger_config(log_dir='/var/tmp', - logging_env="no_env", - edx_filename="edx.log", - dev_env=False, - debug=False, - service_variant='lms'): - """ - Return the appropriate logging config dictionary. You should assign the - result of this to the LOGGING var in your settings. - """ - - hostname = platform.node().split(".")[0] - syslog_format = ( - "[service_variant={service_variant}]" - "[%(name)s][env:{logging_env}] %(levelname)s " - "[{hostname} %(process)d] [%(filename)s:%(lineno)d] " - "- %(message)s" - ).format( - service_variant=service_variant, - logging_env=logging_env, hostname=hostname - ) - - handlers = ['console'] - - logger_config = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'standard': { - 'format': '%(asctime)s %(levelname)s %(process)d ' - '[%(name)s] %(filename)s:%(lineno)d - %(message)s', - }, - 'syslog_format': {'format': syslog_format}, - 'raw': {'format': '%(message)s'}, - }, - 'handlers': { - 'console': { - 'level': 'DEBUG' if debug else 'INFO', - 'class': 'logging.StreamHandler', - 'formatter': 'standard', - 'stream': sys.stdout, - }, - 'tracking': { - 'level': 'DEBUG', - 'class': 'logging.handlers.RotatingFileHandler', - 'filename': '/var/tmp/tracking_logs.log', - 'backupCount': 5, - 'formatter': 'raw', - 'maxBytes': 10485760 - } - }, - 'loggers': { - 'django': { - 'handlers': handlers, - 'propagate': True, - 'level': 'INFO' - }, - 'tracking': { - 'handlers': ['tracking'], - 'level': 'DEBUG', - 'propagate': False, - }, - 'requests': { - 'handlers': handlers, - 'propagate': True, - 'level': 'WARNING' - }, - 'factory': { - 'handlers': handlers, - 'propagate': True, - 'level': 'WARNING' - }, - 'django.request': { - 'handlers': handlers, - 'propagate': True, - 'level': 'WARNING' - }, - '': { - 'handlers': handlers, - 'level': 'DEBUG', - 'propagate': False - }, - } - } - - return logger_config +from openedx.core.lib.logsettings import get_docker_logger_config LOGGING = get_docker_logger_config() diff --git a/openedx/core/lib/logsettings.py b/openedx/core/lib/logsettings.py index 8762147a9a..7e9a776fae 100644 --- a/openedx/core/lib/logsettings.py +++ b/openedx/core/lib/logsettings.py @@ -135,3 +135,103 @@ def log_python_warnings(): except ImportError: pass logging.captureWarnings(True) + + +def get_docker_logger_config(log_dir='/var/tmp', + logging_env="no_env", + edx_filename="edx.log", + dev_env=False, + debug=False, + service_variant='lms'): + """ + Return the appropriate logging config dictionary for a docker based setup. + You should assign the result of this to the LOGGING var in your settings. + """ + + hostname = platform.node().split(".")[0] + syslog_format = ( + "[service_variant={service_variant}]" + "[%(name)s][env:{logging_env}] %(levelname)s " + "[{hostname} %(process)d] [%(filename)s:%(lineno)d] " + "- %(message)s" + ).format( + service_variant=service_variant, + logging_env=logging_env, hostname=hostname + ) + + handlers = ['console'] + + logger_config = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'standard': { + 'format': '%(asctime)s %(levelname)s %(process)d ' + '[%(name)s] %(filename)s:%(lineno)d - %(message)s', + }, + 'syslog_format': {'format': syslog_format}, + 'raw': {'format': '%(message)s'}, + }, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse', + }, + 'userid_context': { + '()': 'edx_django_utils.logging.UserIdFilter', + }, + 'remoteip_context': { + '()': 'edx_django_utils.logging.RemoteIpFilter', + } + }, + 'handlers': { + 'console': { + 'level': 'DEBUG' if debug else 'INFO', + 'class': 'logging.StreamHandler', + 'formatter': 'standard', + 'filters': ['userid_context', 'remoteip_context'], + 'stream': sys.stderr, + }, + 'tracking': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': '/var/tmp/tracking_logs.log', + 'backupCount': 5, + 'formatter': 'raw', + 'maxBytes': 10485760 + } + }, + 'loggers': { + 'django': { + 'handlers': handlers, + 'propagate': True, + 'level': 'INFO' + }, + 'tracking': { + 'handlers': ['tracking'], + 'level': 'DEBUG', + 'propagate': False, + }, + 'requests': { + 'handlers': handlers, + 'propagate': True, + 'level': 'WARNING' + }, + 'factory': { + 'handlers': handlers, + 'propagate': True, + 'level': 'WARNING' + }, + 'django.request': { + 'handlers': handlers, + 'propagate': True, + 'level': 'ERROR' + }, + '': { + 'handlers': handlers, + 'level': 'INFO', + 'propagate': False + }, + } + } + + return logger_config