diff options
author | Joshua Watt <jpewhacker@gmail.com> | 2020-03-11 18:28:45 -0500 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2020-03-12 23:03:11 +0000 |
commit | e860d93b76c142fdae90226bc68e4fe6e7b6a9db (patch) | |
tree | 35e04c053053dfa113e94f68283529bef855ae18 /lib/bb | |
parent | b3f3779adf63c0d970462a558a6205da1d30c0ed (diff) | |
download | bitbake-contrib-e860d93b76c142fdae90226bc68e4fe6e7b6a9db.tar.gz |
msg: Add helper to merge logging configs
Adds a function that can be used by UI front ends to merge logging
configuration fragments.
Signed-off-by: Joshua Watt <JPEWhacker@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'lib/bb')
-rw-r--r-- | lib/bb/msg.py | 89 |
1 files changed, 48 insertions, 41 deletions
diff --git a/lib/bb/msg.py b/lib/bb/msg.py index 05645739d..582165dd0 100644 --- a/lib/bb/msg.py +++ b/lib/bb/msg.py @@ -229,6 +229,53 @@ def has_console_handler(logger): return True return False +def mergeLoggingConfig(logconfig, userconfig): + logconfig = copy.deepcopy(logconfig) + userconfig = copy.deepcopy(userconfig) + + # Merge config with the default config + if userconfig.get('version') != logconfig['version']: + raise BaseException("Bad user configuration version. Expected %r, got %r" % (logconfig['version'], userconfig.get('version'))) + + # Set some defaults to make merging easier + userconfig.setdefault("loggers", {}) + + # If a handler, formatter, or filter is defined in the user + # config, it will replace an existing one in the default config + for k in ("handlers", "formatters", "filters"): + logconfig.setdefault(k, {}).update(userconfig.get(k, {})) + + seen_loggers = set() + for name, l in logconfig["loggers"].items(): + # If the merge option is set, merge the handlers and + # filters. Otherwise, if it is False, this logger won't get + # add to the set of seen loggers and will replace the + # existing one + if l.get('bitbake_merge', True): + ulogger = userconfig["loggers"].setdefault(name, {}) + ulogger.setdefault("handlers", []) + ulogger.setdefault("filters", []) + + # Merge lists + l.setdefault("handlers", []).extend(ulogger["handlers"]) + l.setdefault("filters", []).extend(ulogger["filters"]) + + # Replace other properties if present + if "level" in ulogger: + l["level"] = ulogger["level"] + + if "propagate" in ulogger: + l["propagate"] = ulogger["propagate"] + + seen_loggers.add(name) + + # Add all loggers present in the user config, but not any that + # have already been processed + for name in set(userconfig["loggers"].keys()) - seen_loggers: + logconfig["loggers"][name] = userconfig["loggers"][name] + + return logconfig + def setLoggingConfig(defaultconfig, userconfigfile=None): logconfig = copy.deepcopy(defaultconfig) @@ -244,47 +291,7 @@ def setLoggingConfig(defaultconfig, userconfigfile=None): raise BaseException("Unrecognized file format: %s" % userconfigfile) if userconfig.get('bitbake_merge', True): - # Merge config with the default config - if userconfig.get('version') != logconfig['version']: - raise BaseException("Bad user configuration version. Expected %r, got %r" % (logconfig['version'], userconfig.get('version'))) - - # Set some defaults to make merging easier - userconfig.setdefault("loggers", {}) - - # If a handler, formatter, or filter is defined in the user - # config, it will replace an existing one in the default config - for k in ("handlers", "formatters", "filters"): - logconfig.setdefault(k, {}).update(userconfig.get(k, {})) - - seen_loggers = set() - for name, l in logconfig["loggers"].items(): - # If the merge option is set, merge the handlers and - # filters. Otherwise, if it is False, this logger won't get - # add to the set of seen loggers and will replace the - # existing one - if l.get('bitbake_merge', True): - ulogger = userconfig["loggers"].setdefault(name, {}) - ulogger.setdefault("handlers", []) - ulogger.setdefault("filters", []) - - # Merge lists - l.setdefault("handlers", []).extend(ulogger["handlers"]) - l.setdefault("filters", []).extend(ulogger["filters"]) - - # Replace other properties if present - if "level" in ulogger: - l["level"] = ulogger["level"] - - if "propagate" in ulogger: - l["propagate"] = ulogger["propagate"] - - seen_loggers.add(name) - - # Add all loggers present in the user config, but not any that - # have already been processed - for name in set(userconfig["loggers"].keys()) - seen_loggers: - logconfig["loggers"][name] = userconfig["loggers"][name] - + logconfig = mergeLoggingConfig(logconfig, userconfig) else: # Replace the entire default config logconfig = userconfig |