在线修改Log级别

package xxxx;

import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.Jdk14Logger;
import org.apache.commons.logging.impl.Log4JLogger;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SetLogLevel extends Thread {
	private static final String MARKER = "<!-- OUTPUT -->";
	private static final Logger logger = LoggerFactory
			.getLogger(SetLogLevel.class);
	private Boolean stopFlag = false;
	private static long updateTimer = System.currentTimeMillis();
	private static long intervalTime = 300 * 1000;

	public void run() {
		this.setName("SetLogLevel");
		
		// get init configure
		PropertiesParser props = new PropertiesParser("agentlog.properties");
		if (props.getProperty("tdbank.interval.time") != null) {
			intervalTime = Integer.valueOf(props
					.getProperty("tdbank.interval.time"));
		}
		while (!stopFlag) {
			try {
				// sleep 5s
				Thread.sleep(5000);
				if ((System.currentTimeMillis() - updateTimer) < intervalTime) {
					continue;
				}
			} catch (InterruptedException e) {
				continue;
			}

			props = new PropertiesParser("agentlog.properties");

			if (props.getProperty("tdbank.interval.time") != null) {
				intervalTime = Integer.valueOf(props
						.getProperty("tdbank.interval.time"));
			}

			Map<String, String> allParameter = props.getAllProperties();
			for (Entry<String, String> one : allParameter.entrySet()) {
				try {
					if (!one.getKey().startsWith("tdbank.")) {
						logger.debug("setLog" + one.getKey() + " : "
								+ one.getValue());
						SetLog(one.getKey(), one.getValue());
					}
				} catch (Exception e) {
					logger.error("set log fail" + e);
				}
			}
			updateTimer = System.currentTimeMillis();
		}
	}

	public void stopLogServer() {
		stopFlag = true;
	}

	public static void SetLog(String logName, String level) throws IOException {

		if (logName != null) {

			Log log = LogFactory.getLog(logName);
			logger.debug(MARKER + "Log Class:" + log.getClass().getName());
			if (level != null) {
				logger.debug(MARKER + "Submitted Level:" + level);
			}

			if (log instanceof Log4JLogger) {
				process(((Log4JLogger) log).getLogger(), level);
			} else if (log instanceof Jdk14Logger) {
				process(((Jdk14Logger) log).getLogger(), level);
			} else {
				logger.debug("Sorry, " + log.getClass() + " not supported.");
			}
		}
	}

	private static void process(org.apache.log4j.Logger log, String level)
			throws IOException {
		if (level != null) {
			log.setLevel(org.apache.log4j.Level.toLevel(level));
			logger.debug(MARKER + "Setting Level to " + level);
		}
		logger.debug(MARKER + "Effective level: <b>" + log.getEffectiveLevel());
	}

	private static void process(java.util.logging.Logger log, String level)
			throws IOException {
		if (level != null) {
			log.setLevel(java.util.logging.Level.parse(level));
			logger.debug(MARKER + "Setting Level to " + level);
		}

		java.util.logging.Level lev;
		for (; (lev = log.getLevel()) == null; log = log.getParent());
		logger.debug(MARKER + "Effective level: " + lev);
	}

}

猜你喜欢

转载自sznmail.iteye.com/blog/1973753