Mercurial > public > mercurial-scm > hg-stable
diff mercurial/ui.py @ 40764:55b053af7196
ui: manage logger instances and event filtering by core ui
The setup code in blackbox needs more tweaks since it has lots of black
magics. I'll fix them by follow-up patches.
To be clear, the goal of this series is to provide a proper way for command
server to install its own logger. I need it to debug in-memory repository
cache.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 11 Nov 2018 18:08:33 +0900 |
parents | c72a81bc2e82 |
children | fdc6eb1d650d |
line wrap: on
line diff
--- a/mercurial/ui.py Mon Nov 12 21:10:51 2018 +0900 +++ b/mercurial/ui.py Sun Nov 11 18:08:33 2018 +0900 @@ -235,6 +235,7 @@ self._fmsgout = src._fmsgout self._fmsgerr = src._fmsgerr self._finoutredirected = src._finoutredirected + self._loggers = src._loggers.copy() self.pageractive = src.pageractive self._disablepager = src._disablepager self._tweaked = src._tweaked @@ -263,6 +264,7 @@ self._fmsgout = self.fout # configurable self._fmsgerr = self.ferr # configurable self._finoutredirected = False + self._loggers = {} self.pageractive = False self._disablepager = False self._tweaked = False @@ -1709,6 +1711,18 @@ '''exists only so low-level modules won't need to import scmutil''' return scmutil.progress(self, topic, unit, total) + def getlogger(self, name): + """Returns a logger of the given name; or None if not registered""" + return self._loggers.get(name) + + def setlogger(self, name, logger): + """Install logger which can be identified later by the given name + + More than one loggers can be registered. Use extension or module + name to uniquely identify the logger instance. + """ + self._loggers[name] = logger + def log(self, event, *msg, **opts): '''hook for logging facility extensions @@ -1720,6 +1734,14 @@ **opts currently has no defined meanings. ''' + if not self._loggers: + return + activeloggers = [l for l in self._loggers.itervalues() + if l.tracked(event)] + if not activeloggers: + return + for logger in activeloggers: + logger.log(self, event, msg, opts) def label(self, msg, label): '''style msg based on supplied label