From 5d40529c74eac2072308de37a30d6da382adc2bd Mon Sep 17 00:00:00 2001
From: David Douard <david.douard@sdfa3.org>
Date: Thu, 31 Jan 2019 13:35:56 +0100
Subject: [PATCH] Make cli tools output logs on the console by default

for other log levels than DEBUG, and add a --no-stdout option flag to
disable this.
---
 swh/scheduler/celery_backend/config.py | 14 ++++++++++----
 swh/scheduler/cli.py                   |  7 +++++--
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/swh/scheduler/celery_backend/config.py b/swh/scheduler/celery_backend/config.py
index f5331f16..11e8c5e1 100644
--- a/swh/scheduler/celery_backend/config.py
+++ b/swh/scheduler/celery_backend/config.py
@@ -36,10 +36,12 @@ DEFAULT_CONFIG = {
     'task_soft_time_limit': ('int', 0),
 }
 
+logger = logging.getLogger(__name__)
+
 
 @setup_logging.connect
 def setup_log_handler(loglevel=None, logfile=None, format=None,
-                      colorize=None, **kwargs):
+                      colorize=None, log_console=True, **kwargs):
     """Setup logging according to Software Heritage preferences.
 
     We use the command-line loglevel for tasks only, as we never
@@ -55,7 +57,9 @@ def setup_log_handler(loglevel=None, logfile=None, format=None,
     root_logger = logging.getLogger('')
     root_logger.setLevel(logging.INFO)
 
-    if loglevel == logging.DEBUG:
+    if loglevel <= logging.DEBUG:
+        log_console = True
+    if log_console:
         color_formatter = ColorFormatter(format) if colorize else formatter
         console = logging.StreamHandler()
         console.setLevel(logging.DEBUG)
@@ -94,6 +98,8 @@ def setup_queues_and_tasks(sender, instance, **kwargs):
 
     """
 
+    logger.info('Setup Queues & Tasks for %s', sender)
+
     for module_name in itertools.chain(
             # celery worker -I flag
             instance.app.conf['include'],
@@ -259,8 +265,8 @@ def build_app(config=None):
     config = merge_configs(
         {k: v for (k, (_, v)) in DEFAULT_CONFIG.items()},
         config or {})
-    logging.getLogger(__name__).info(
-        'Creating a Celery app with %s', config)
+
+    logger.debug('Creating a Celery app with %s', config)
 
     # Instantiate the Celery app
     app = Celery(broker=config['task_broker'],
diff --git a/swh/scheduler/cli.py b/swh/scheduler/cli.py
index 925c1819..dbda5bd4 100644
--- a/swh/scheduler/cli.py
+++ b/swh/scheduler/cli.py
@@ -93,8 +93,10 @@ def pretty_print_task(task, full=False):
 @click.option('--log-level', '-l', default='INFO',
               type=click.Choice(logging._nameToLevel.keys()),
               help="Log level (default to INFO)")
+@click.option('--no-stdout', is_flag=True, default=False,
+              help="Do NOT output logs on the console")
 @click.pass_context
-def cli(ctx, config_file, database, url, log_level):
+def cli(ctx, config_file, database, url, log_level, no_stdout):
     """Software Heritage Scheduler CLI interface
 
     Default to use the the local scheduler instance (plugged to the
@@ -104,7 +106,8 @@ def cli(ctx, config_file, database, url, log_level):
     from swh.scheduler.celery_backend.config import setup_log_handler
     log_level = setup_log_handler(
         loglevel=log_level, colorize=False,
-        format='[%(levelname)s] %(name)s -- %(message)s')
+        format='[%(levelname)s] %(name)s -- %(message)s',
+        log_console=not no_stdout)
 
     ctx.ensure_object(dict)
 
-- 
GitLab