From f7baa0d8f078588b9c4640feeb7e8335f07b19d1 Mon Sep 17 00:00:00 2001 From: John Jarvis Date: Wed, 5 Sep 2012 11:25:33 -0400 Subject: [PATCH] * By default local dev environments will be setup to send tracking logs and application logs (DEBUG) to ENV_ROOT/log. Logs are rotated using the RotatingFileHandler * For non dev environments logging will continue to be handled by rsyslogd --- lms/envs/dev.py | 3 +- lms/envs/logsettings.py | 88 ++++++++++++++++++++++++++++++----------- 2 files changed, 67 insertions(+), 24 deletions(-) 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