Bug 1285299 - Optionally ignore unused Mozlog formatter options; r?jgraham draft
authorAnjana Vakil <anjanavakil@gmail.com>
Wed, 07 Sep 2016 20:55:21 +0200
changeset 411217 dea2ba419ad7fe37f29905844ba36fd76abfc76c
parent 411121 33e7ae9b3104e90ce56bbde1906efa97fb116449
child 411218 d45da14957a044e67f6926a9a0d2f217315e14ea
child 411255 b3610c5830a0bc8be06e0724277e3987365e7f2c
child 411590 ff5f7c127b57edaf3039f18042517d508f32ab02
child 411597 07bdd0d18463de5ec22355f60f9b9a167874ab51
push id28856
push userbmo:anjanavakil@gmail.com
push dateWed, 07 Sep 2016 19:41:58 +0000
reviewersjgraham
bugs1285299
milestone51.0a1
Bug 1285299 - Optionally ignore unused Mozlog formatter options; r?jgraham Add a parameter `allow_unused_options` to the `setup_logging` and `setup_handlers` methods in mozlog.commandline. When this parameter is True, do not raise a ValueError in `setup_handlers` if the command line arguments include formatter options for unused formatters. (Default value is False.) This allows parsed arguments from e.g. the pytest-mozlog plugin to be passed directly to `setup_logging`, without filtering out unused formatter options. MozReview-Commit-ID: 8el0oaT4y1X
testing/mozbase/mozlog/mozlog/commandline.py
--- a/testing/mozbase/mozlog/mozlog/commandline.py
+++ b/testing/mozbase/mozlog/mozlog/commandline.py
@@ -137,28 +137,28 @@ def add_logging_group(parser, include_fo
     for optname, (cls, help_str, formatters, action) in fmt_options.iteritems():
         for fmt in formatters:
             # make sure fmt is in log_formatters and is accepted
             if fmt in log_formatters and fmt in include_formatters:
                 group_add("--log-%s-%s" % (fmt, optname), action=action,
                           help=help_str, default=None)
 
 
-def setup_handlers(logger, formatters, formatter_options):
+def setup_handlers(logger, formatters, formatter_options, allow_unused_options=False):
     """
     Add handlers to the given logger according to the formatters and
     options provided.
 
     :param logger: The logger configured by this function.
     :param formatters: A dict of {formatter, [streams]} to use in handlers.
     :param formatter_options: a dict of {formatter: {option: value}} to
                               to use when configuring formatters.
     """
     unused_options = set(formatter_options.keys()) - set(formatters.keys())
-    if unused_options:
+    if unused_options and not allow_unused_options:
         msg = ("Options specified for unused formatter(s) (%s) have no effect" %
                list(unused_options))
         raise ValueError(msg)
 
     for fmt, streams in formatters.iteritems():
         formatter_cls = log_formatters[fmt][0]
         formatter = formatter_cls()
         handler_wrappers_and_options = []
@@ -177,17 +177,17 @@ def setup_handlers(logger, formatters, f
 
         for value in streams:
             handler = handlers.StreamHandler(stream=value, formatter=formatter)
             for wrapper, wrapper_args in handler_wrappers_and_options:
                 handler = wrapper(handler, *wrapper_args)
             logger.add_handler(handler)
 
 
-def setup_logging(logger, args, defaults=None, formatter_defaults=None):
+def setup_logging(logger, args, defaults=None, formatter_defaults=None, allow_unused_options=False):
     """
     Configure a structuredlogger based on command line arguments.
 
     The created structuredlogger will also be set as the default logger, and
     can be retrieved with :py:func:`~mozlog.get_default_logger`.
 
     :param logger: A StructuredLogger instance or string name. If a string, a
                    new StructuredLogger instance will be created using
@@ -263,12 +263,12 @@ def setup_logging(logger, args, defaults
     for name in formatters:
         if name not in formatter_options:
             formatter_options[name] = default_formatter_options(name, formatter_defaults)
 
     # If the user specified --valgrind, add it as an option for all formatters
     if args.get('valgrind', None) is not None:
         for name in formatters:
             formatter_options[name]['valgrind'] = True
-    setup_handlers(logger, formatters, formatter_options)
+    setup_handlers(logger, formatters, formatter_options, allow_unused_options)
     set_default_logger(logger)
 
     return logger