From e13cceb0ce044ff6f338f11bb33c7f7e02a5da82 Mon Sep 17 00:00:00 2001 From: ougongchang Date: Tue, 18 Aug 2020 20:18:18 +0800 Subject: [PATCH] set stdout to None and set console output to False when start mindinsight in subprocess If the env or gunicorn has some error, there will not be any error in console or error log file when we set the subprocss stdout to devnull. So I set it to None it will inhert its parent process stdout. When gunicorn cause error, it will show error in console. --- mindinsight/backend/config/gunicorn_conf.py | 6 +++--- mindinsight/backend/run.py | 12 ++++++++---- mindinsight/conf/constants.py | 2 +- mindinsight/utils/log.py | 2 +- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/mindinsight/backend/config/gunicorn_conf.py b/mindinsight/backend/config/gunicorn_conf.py index 8bb194a9..37221a4e 100644 --- a/mindinsight/backend/config/gunicorn_conf.py +++ b/mindinsight/backend/config/gunicorn_conf.py @@ -32,10 +32,10 @@ timeout = 30 graceful_timeout = 30 daemon = False -captureoutput = True +captureoutput = False -# write gunicorn default log to stream, and using mindinsight logger write gunicorn log to file. -accesslog = '-' +# write gunicorn default log to devnull, and using mindinsight logger write gunicorn log to file. +accesslog = os.devnull def on_starting(server): diff --git a/mindinsight/backend/run.py b/mindinsight/backend/run.py index d6a600cc..db5a5a42 100644 --- a/mindinsight/backend/run.py +++ b/mindinsight/backend/run.py @@ -199,14 +199,18 @@ class GunicornLogger(Logger): """Rewrite gunicorn default logger.""" def __init__(self, cfg): - self.access_log = setup_logger('gunicorn', 'access') - self.error_log = setup_logger('gunicorn', 'error') - super(GunicornLogger, self).__init__(cfg) + self.cfg = cfg + self.access_log = setup_logger('gunicorn', 'access', formatter='%(message)s') + self.error_log = setup_logger('gunicorn', 'error', formatter=self.error_fmt) access_log_path = _get_access_log_path() error_log_path = _get_error_log_path() os.chmod(access_log_path, stat.S_IREAD | stat.S_IWRITE) os.chmod(error_log_path, stat.S_IREAD | stat.S_IWRITE) + def now(self): + """return Log Format""" + return time.strftime('[%Y-%m-%d-%H:%M:%S %z]') + def _get_all_ip_addresses(host): """Get all the accessible IP address.""" @@ -255,7 +259,7 @@ def start(): shell=False, # Change stdout to DEVNULL to prevent broken pipe error when creating new processes. stdin=subprocess.DEVNULL, - stdout=subprocess.DEVNULL, + stdout=None, stderr=subprocess.STDOUT ) diff --git a/mindinsight/conf/constants.py b/mindinsight/conf/constants.py index 0ccb2700..391182ac 100644 --- a/mindinsight/conf/constants.py +++ b/mindinsight/conf/constants.py @@ -51,7 +51,7 @@ def _calc_default_max_processes_cnt(): LOG_FORMAT = '[%(levelname)s] MI(%(process)d:%(thread)d,%(processName)s):%(asctime)s ' \ '[%(filepath)s:%(lineno)d][%(sub_module)s] %(message)s' -GUNICORN_ACCESS_FORMAT = "'%(h)s <%(r)s> %(s)s %(b)s <%(f)s> <%(a)s> %(D)s'" +GUNICORN_ACCESS_FORMAT = "'%(t)s %(h)s <%(r)s> %(s)s %(b)s <%(f)s> <%(a)s> %(L)s '" LOG_LEVEL = logging.INFO # rotating max bytes, default is 50M diff --git a/mindinsight/utils/log.py b/mindinsight/utils/log.py index 00e0132a..6fa62f13 100644 --- a/mindinsight/utils/log.py +++ b/mindinsight/utils/log.py @@ -189,7 +189,7 @@ def setup_logger(sub_module, log_name, **kwargs): if not formatter: formatter = settings.LOG_FORMAT - if kwargs.get('console', True): + if kwargs.get('console', False): console_handler = logging.StreamHandler(sys.stdout) console_handler.formatter = MindInsightFormatter(sub_module, formatter) logger.addHandler(console_handler)