groups = {} groups["dev"] = ["123.456.78.90:1001", "321.654.87.09:10292"] groups["other"] = ["345.657.432.12:12345", "987.123.456.43:9090"] def changeServerAppLogLevel(app, logger, level, serverUrl): ## connect to the server connect("weblogic", "weblogic", url=serverUrl) ## go to the custom MBean tree custom() ## go to the place where our app log level mbeans are stored. cd('com.theserverlabs.jmx/com.theserverlabs.jmx:type=ApplicationLogManager,name=' + app + 'LogManager') ## horrible code necessary to invoke a Java method that changes the log level args = jarray.array([java.lang.String(logger), java.lang.String(level)],java.lang.Object) sig = jarray.array(['java.lang.String', 'java.lang.String'],java.lang.String) print 'changing log level to ' + level + ' for app ' + app + ' on server ' + serverUrl invoke('setLogLevel',args,sig) print ' ... done. New log levels are:' print(get('LogLevels')) # "main method" of the python script argslength = len(sys.argv) if argslength < 4 : print '==>Insufficient arguments' print '==>Syntax: changeAppLogLevel.py [SERVER] [APP NAME] [LOGGER] [LEVEL]' print '==> where: SERVER=host and port of the server' print '==> APP NAME=context root of the app e.g. xxx for /xxx' print '==> LOGGER=log4j logger name' print '==> LEVEL=TRACE/DEBUG/WARN/INFO/ERROR/FATAL' print '==> e.g: changeAppLogLevel.py xxx com.theserverlabs.blog.logging DEBUG' exit() else: app = sys.argv[1] logger = sys.argv[2] level = sys.argv[3] server = sys.argv[4] # change the log level for the server. if there was more than one server # in the cluster, you could add multiple calls here, each with a different # server URL if server in groups: for server_address in groups[server] changeServerAppLogLevel(app, logger, level, server_address) else: changeServerAppLogLevel(app, logger, level, server) exit()