Hello Piotr Kliczewski, Dan Kenigsberg,
I'd like you to do a code review. Please visit
https://gerrit.ovirt.org/59874
to review the following change.
Change subject: API: allow setLogLevel to tune a specific logger
......................................................................
API: allow setLogLevel to tune a specific logger
The not so known setLogLevel VDSM verb allows to dynamically tune
the log level of the root logger, until the next restart of VDSM.
This patch extends the API to let the client tune any specific
logger.
Change-Id: I8f40488fac04031552f36b9de026a0062ab81db0
Backports-To: 4.0
Backports-To: 3.6
Signed-off-by: Francesco Romani <[email protected]>
Reviewed-on: https://gerrit.ovirt.org/38426
Reviewed-by: Piotr Kliczewski <[email protected]>
Continuous-Integration: Jenkins CI
Reviewed-by: Dan Kenigsberg <[email protected]>
---
M client/vdsClient.py
M lib/api/vdsm-api.yml
M lib/vdsm/logUtils.py
M lib/vdsm/rpc/bindingxmlrpc.py
M vdsm/API.py
5 files changed, 29 insertions(+), 14 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/74/59874/1
diff --git a/client/vdsClient.py b/client/vdsClient.py
index c7b359d..7ffff54 100755
--- a/client/vdsClient.py
+++ b/client/vdsClient.py
@@ -1565,9 +1565,13 @@
return 0, ''
def do_setLogLevel(self, args):
- validateArgTypes(args, [int], requiredArgsNumber=1)
+ validateArgTypes(args, [str, str], requiredArgsNumber=1)
level = args[0]
- stats = self.s.setLogLevel(level)
+ if len(args) >= 2:
+ name = args[1]
+ else:
+ name = ''
+ stats = self.s.setLogLevel(level, name)
if stats['status']['code']:
return stats['status']['code'], stats['status']['message']
return 0, ''
@@ -2619,8 +2623,12 @@
'prepareForShutdown': (serv.prepareForShutdown,
('', '')),
'setLogLevel': (serv.do_setLogLevel,
- ('<level> [logName][,logName]...', 'set log verbosity'
- ' level (10=DEBUG, 50=CRITICAL'
+ ('<level> [loggerName]',
+ 'set log verbosity. Arguments:\n'
+ ' <level> is one of DEBUG INFO WARNING ERROR CRITICAL'
+ ' case sensitive\n'
+ ' <loggerName> is the logger to set.'
+ ' If not given, sets the root logger.'
)),
'setMOMPolicy': (serv.do_setMOMPolicy,
('<policyfile>', 'set MOM policy')),
diff --git a/lib/api/vdsm-api.yml b/lib/api/vdsm-api.yml
index ef65165..ab6ca0d 100644
--- a/lib/api/vdsm-api.yml
+++ b/lib/api/vdsm-api.yml
@@ -7459,6 +7459,10 @@
- description: The new verosity level desired
name: level
type: *LoggingLevel
+ - defaultvalue: ''
+ description: The logger to set
+ name: name
+ type: string
Host.setSafeNetworkConfig:
added: '3.1'
diff --git a/lib/vdsm/logUtils.py b/lib/vdsm/logUtils.py
index c9a75c8..60ceca6 100644
--- a/lib/vdsm/logUtils.py
+++ b/lib/vdsm/logUtils.py
@@ -217,13 +217,14 @@
}
-def set_level(level):
+def set_level(level, name=''):
if level not in _LEVELS:
raise ValueError("unknown log level: %r" % level)
log_level = _LEVELS[level]
- logging.warning('Setting loglevel to %s (%d)', level, log_level)
- handlers = logging.getLogger().handlers
- [fileHandler] = [h for h in handlers if
- isinstance(h, logging.FileHandler)]
- fileHandler.setLevel(int(level))
+ log_name = None if not name else name
+ # getLogger() default argument is None, not ''
+ logger = logging.getLogger(log_name)
+ logging.warning('Setting loglevel on %r to %s (%d)',
+ logger.name, level, log_level)
+ logger.setLevel(log_level)
diff --git a/lib/vdsm/rpc/bindingxmlrpc.py b/lib/vdsm/rpc/bindingxmlrpc.py
index d2f05fa..ee92d26 100644
--- a/lib/vdsm/rpc/bindingxmlrpc.py
+++ b/lib/vdsm/rpc/bindingxmlrpc.py
@@ -638,9 +638,9 @@
return api.fenceNode(addr, port, agent, username, password, action,
secure, options, policy)
- def setLogLevel(self, level):
+ def setLogLevel(self, level, name=''):
api = API.Global()
- return api.setLogLevel(level)
+ return api.setLogLevel(level, name)
def setMOMPolicy(self, policy):
api = API.Global()
diff --git a/vdsm/API.py b/vdsm/API.py
index dd72c2b..c38fbe9 100644
--- a/vdsm/API.py
+++ b/vdsm/API.py
@@ -1365,16 +1365,18 @@
'info': hostapi.get_stats(self._cif,
sampling.host_samples.stats())}
- def setLogLevel(self, level):
+ def setLogLevel(self, level, name=''):
"""
Set verbosity level of vdsm's log.
params
level: requested logging level. `logging.DEBUG` `logging.ERROR`
+ name: logger name to set. If not provided, defaults to the root
+ logger. Otherwise, tune the specific logger provided.
Doesn't survive a restart
"""
- logUtils.set_level(level)
+ logUtils.set_level(level, name)
return dict(status=doneCode)
# VM-related functions
--
To view, visit https://gerrit.ovirt.org/59874
To unsubscribe, visit https://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I8f40488fac04031552f36b9de026a0062ab81db0
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: ovirt-4.0
Gerrit-Owner: Francesco Romani <[email protected]>
Gerrit-Reviewer: Dan Kenigsberg <[email protected]>
Gerrit-Reviewer: Piotr Kliczewski <[email protected]>
_______________________________________________
vdsm-patches mailing list
[email protected]
https://lists.fedorahosted.org/admin/lists/[email protected]