From 00d15e79fe6a6fe5fd2e3949584a7f4e3d8ede4d Mon Sep 17 00:00:00 2001 From: "P. Christeas" Date: Fri, 14 Aug 2009 13:18:22 +0300 Subject: [PATCH] [IMP]: allow Log level to be changed in runtime. Export an RPC method and let a simple client change the log level. This helps when we want to debug the server without restarting it. bzr revid: p_christ@hol.gr-20090814101822-pu2ed3249b6m30v8 --- bin/netsvc.py | 6 ++++++ bin/service/web_services.py | 7 +++++++ change-loglevel.sh | 24 ++++++++++++++++++++++++ 3 files changed, 37 insertions(+) create mode 100755 change-loglevel.sh diff --git a/bin/netsvc.py b/bin/netsvc.py index 6894ea7d1da..b60546ce054 100644 --- a/bin/netsvc.py +++ b/bin/netsvc.py @@ -193,6 +193,12 @@ class Logger(object): # better ignore the exception and carry on.. pass + def set_loglevel(self, level): + log = logging.getLogger() + log.setLevel(logging.INFO) # make sure next msg is printed + log.info("Log level changed to %s" % logging.getLevelName(level)) + log.setLevel(level) + def shutdown(self): logging.shutdown() diff --git a/bin/service/web_services.py b/bin/service/web_services.py index 46a66594162..6bb6989ef8e 100644 --- a/bin/service/web_services.py +++ b/bin/service/web_services.py @@ -375,6 +375,7 @@ class common(netsvc.Service): self.exportMethod(self.get_migration_scripts) self.exportMethod(self.get_server_environment) self.exportMethod(self.login_message) + self.exportMethod(self.set_loglevel) def ir_set(self, db, uid, password, keys, args, name, value, replace=True, isobject=False): security.check(db, uid, password) @@ -561,6 +562,12 @@ GNU Public Licence. def login_message(self): return tools.config.get('login_message', False) + def set_loglevel(self, password, loglevel): + security.check_super(password) + l = netsvc.Logger() + l.set_loglevel(int(loglevel)) + return True + common() class objects_proxy(netsvc.Service): diff --git a/change-loglevel.sh b/change-loglevel.sh new file mode 100755 index 00000000000..cb325435a1a --- /dev/null +++ b/change-loglevel.sh @@ -0,0 +1,24 @@ +#!/bin/bash + +ADMIN_PASSWD='admin' +method_1() { + cat '-' << EOF + + + set_loglevel + + $ADMIN_PASSWD + + + $1 + + + +EOF +} +LEVEL=10 + +if [ -n "$1" ] ; then LEVEL=$1 ; fi + +method_1 $LEVEL | POST -c 'text/xml' http://localhost:8069/xmlrpc/common +#eof