diff --git a/lms/envs/dev.py b/lms/envs/dev.py index d122b167f2..0867d0c897 100644 --- a/lms/envs/dev.py +++ b/lms/envs/dev.py @@ -23,7 +23,8 @@ WIKI_ENABLED = True LOGGING = get_logger_config(ENV_ROOT / "log", logging_env="dev", - tracking_filename="tracking.log", + local_loglevel="DEBUG", + dev_env=True, debug=True) DATABASES = { diff --git a/lms/envs/logsettings.py b/lms/envs/logsettings.py index 847992359d..2b001b0517 100644 --- a/lms/envs/logsettings.py +++ b/lms/envs/logsettings.py @@ -1,3 +1,4 @@ +import os import platform import sys from logging.handlers import SysLogHandler @@ -5,35 +6,49 @@ from logging.handlers import SysLogHandler def get_logger_config(log_dir, logging_env="no_env", - tracking_filename=None, + tracking_filename="tracking.log", + edx_filename="edx.log", + dev_env=False, syslog_addr=None, debug=False, local_loglevel='INFO'): - """Return the appropriate logging config dictionary. You should assign the + """ + + Return the appropriate logging config dictionary. You should assign the result of this to the LOGGING var in your settings. The reason it's done this way instead of registering directly is because I didn't want to worry about resetting the logging state if this is called multiple times when - settings are extended.""" + settings are extended. + + If dev_env is set to true logging will not be done via local rsyslogd, + instead, tracking and application logs will be dropped in log_dir. + + "tracking_filename" and "edx_filename" are ignored unless dev_env + is set to true since otherwise logging is handled by rsyslogd. + + """ # Revert to INFO if an invalid string is passed in if local_loglevel not in ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']: local_loglevel = 'INFO' hostname = platform.node().split(".")[0] - syslog_format = ("[%(name)s][env:{logging_env}] %(levelname)s [{hostname} " + - " %(process)d] [%(filename)s:%(lineno)d] - %(message)s").format( + syslog_format = ("[%(name)s][env:{logging_env}] %(levelname)s " + "[{hostname} %(process)d] [%(filename)s:%(lineno)d] " + "- %(message)s").format( logging_env=logging_env, hostname=hostname) - handlers = ['console'] if debug else ['console', 'syslogger-remote', - 'syslogger-local', 'newrelic'] + handlers = ['console', 'local'] if debug else ['console', + 'syslogger-remote', 'local', 'newrelic'] - return { + 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', + 'format': '%(asctime)s %(levelname)s %(process)d ' + '[%(name)s] %(filename)s:%(lineno)d - %(message)s', }, 'syslog_format': {'format': syslog_format}, 'raw': {'format': '%(message)s'}, @@ -51,20 +66,6 @@ def get_logger_config(log_dir, 'address': syslog_addr, 'formatter': 'syslog_format', }, - 'syslogger-local': { - 'level': local_loglevel, - 'class': 'logging.handlers.SysLogHandler', - 'address': '/dev/log', - 'formatter': 'syslog_format', - 'facility': SysLogHandler.LOG_LOCAL0, - }, - 'tracking': { - 'level': 'DEBUG', - 'class': 'logging.handlers.SysLogHandler', - 'address': '/dev/log', - 'facility': SysLogHandler.LOG_LOCAL1, - 'formatter': 'raw', - }, 'newrelic': { 'level': 'ERROR', 'class': 'newrelic_logging.NewRelicHandler', @@ -99,3 +100,44 @@ def get_logger_config(log_dir, }, } } + + if dev_env: + tracking_file_loc = os.path.join(log_dir, tracking_filename) + edx_file_loc = os.path.join(log_dir, edx_filename) + logger_config['handlers'].update({ + 'local': { + 'class': 'logging.handlers.RotatingFileHandler', + 'level': local_loglevel, + 'formatter': 'standard', + 'filename': edx_file_loc, + 'maxBytes': 1024 * 1024 * 2, + 'backupCount': 5, + }, + 'tracking': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': tracking_file_loc, + 'formatter': 'raw', + 'maxBytes': 1024 * 1024 * 2, + 'backupCount': 5, + }, + }) + else: + logger_config['handlers'].update({ + 'local': { + 'level': local_loglevel, + 'class': 'logging.handlers.SysLogHandler', + 'address': '/dev/log', + 'formatter': 'syslog_format', + 'facility': SysLogHandler.LOG_LOCAL0, + }, + 'tracking': { + 'level': 'DEBUG', + 'class': 'logging.handlers.SysLogHandler', + 'address': '/dev/log', + 'facility': SysLogHandler.LOG_LOCAL1, + 'formatter': 'raw', + }, + }) + + return logger_config