From: Alfredo Deza Date: Thu, 1 Feb 2018 20:32:54 +0000 (-0500) Subject: ceph-volume terminal create a logger to get terminal+log messages in one call X-Git-Tag: v12.2.3~19^2~25 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=de3013287fe9c6d879cc4fbca6c06437e5989e21;p=ceph.git ceph-volume terminal create a logger to get terminal+log messages in one call Signed-off-by: Alfredo Deza (cherry picked from commit f6dd0ff15f0aeda9f660e923153f1d3dae68e583) --- diff --git a/src/ceph-volume/ceph_volume/terminal.py b/src/ceph-volume/ceph_volume/terminal.py index 55ce2d4ca28..23ce57e0e9c 100644 --- a/src/ceph-volume/ceph_volume/terminal.py +++ b/src/ceph-volume/ceph_volume/terminal.py @@ -1,3 +1,4 @@ +import logging import sys @@ -114,6 +115,14 @@ def error(msg): return _Write(prefix=red_arrow).raw(msg) +def info(msg): + return _Write(prefix=blue_arrow).raw(msg) + + +def debug(msg): + return _Write(prefix=blue_arrow).raw(msg) + + def warning(msg): return _Write(prefix=yellow_arrow).raw(msg) @@ -122,6 +131,48 @@ def success(msg): return _Write(prefix=green_arrow).raw(msg) +class MultiLogger(object): + """ + Proxy class to be able to report on both logger instances and terminal + messages avoiding the issue of having to call them both separately + + Initialize it in the same way a logger object:: + + logger = terminal.MultiLogger(__name__) + """ + + def __init__(self, name): + self.logger = logging.getLogger(name) + + def _make_record(self, msg, *args): + if len(str(args)): + try: + return msg % args + except TypeError: + self.logger.exception('unable to produce log record: %s' % msg) + return msg + + def warning(self, msg, *args): + record = self._make_record(msg, *args) + warning(record) + self.logger.warning(record) + + def debug(self, msg, *args): + record = self._make_record(msg, *args) + debug(record) + self.logger.debug(record) + + def info(self, msg, *args): + record = self._make_record(msg, *args) + info(record) + self.logger.info(record) + + def error(self, msg, *args): + record = self._make_record(msg, *args) + error(record) + self.logger.error(record) + + def dispatch(mapper, argv=None): argv = argv or sys.argv for count, arg in enumerate(argv, 1):