Based on a proposal by Thorbjørn Ravn Andersens, I wrote code that does this work
Add the following early path to the main method, and now you can set the log level from the comand line. This was checked in my project, but I am new to log4j and may have made a mistake. If so, please correct me.
Logger.getRootLogger().setLevel(Level.WARN); HashMap<String,Level> logLevels=new HashMap<String,Level>(); logLevels.put("ALL",Level.ALL); logLevels.put("TRACE",Level.TRACE); logLevels.put("DEBUG",Level.DEBUG); logLevels.put("INFO",Level.INFO); logLevels.put("WARN",Level.WARN); logLevels.put("ERROR",Level.ERROR); logLevels.put("FATAL",Level.FATAL); logLevels.put("OFF",Level.OFF); for(String name:System.getProperties().stringPropertyNames()){ String logger="log4j.logger."; if(name.startsWith(logger)){ String loggerName=name.substring(logger.length()); String loggerValue=System.getProperty(name); if(logLevels.containsKey(loggerValue)) Logger.getLogger(loggerName).setLevel(logLevels.get(loggerValue)); else Logger.getRootLogger().warn("unknown log4j logg level on comand line: "+loggerValue); } }
lijat Apr 10 '13 at 10:10 2013-04-10 10:10
source share