/**
* Copyright (c) 2005-2010 springside.org.cn
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* $Id: Log4jMBean.java 1192 2010-09-03 15:42:13Z calvinxiu $
*/
package org.springside.modules.log;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedOperationParameter;
import org.springframework.jmx.export.annotation.ManagedOperationParameters;
import org.springframework.jmx.export.annotation.ManagedResource;
/**
* 基于JMX动态配置Logger日志等级, 获取Logger Appender的MBean.
*
* @author calvin
*/
@ManagedResource(objectName = Log4jMBean.LOG4J_MBEAN_NAME, description = "Log4j Management Bean")
public class Log4jMBean {
/**
* Log4jMbean的注册名称.
*/
public static final String LOG4J_MBEAN_NAME = "Log4j:name=log4j";
private static org.slf4j.Logger mbeanLogger = LoggerFactory.getLogger(Log4jMBean.class);
/**
* 获取Root Logger的日志级别.
*/
@ManagedAttribute(description = "Logging level of the root logger")
public String getRootLoggerLevel() {
Logger root = Logger.getRootLogger();
return root.getLevel().toString();
}
/**
* 设置Root Logger的日志级别.
* 如果日志级别名称错误, 设为DEBUG.
*/
@ManagedAttribute(description = "Logging level of the root logger")
public void setRootLoggerLevel(String newLevel) {
Logger root = Logger.getRootLogger();
Level level = Level.toLevel(newLevel);
root.setLevel(level);
mbeanLogger.info("设置Root Logger级别到{}", newLevel);
}
/**
* 获取Logger的日志级别.
*/
@ManagedOperation(description = "Get logging level of the logger")
@ManagedOperationParameters( { @ManagedOperationParameter(name = "loggerName", description = "Logger name") })
public String getLoggerLevel(String loggerName) {
Logger logger = Logger.getLogger(loggerName);
return logger.getEffectiveLevel().toString();
}
/**
* 设置Logger的日志级别.
* 如果日志级别名称错误, 设为DEBUG.
*/
@ManagedOperation(description = "Set new logging level to the logger")
@ManagedOperationParameters( { @ManagedOperationParameter(name = "loggerName", description = "Logger name"),
@ManagedOperationParameter(name = "newlevel", description = "New level") })
public void setLoggerLevel(String loggerName, String newLevel) {
Logger logger = Logger.getLogger(loggerName);
Level level = Level.toLevel(newLevel);
logger.setLevel(level);
mbeanLogger.info("设置{}级别到{}", loggerName, newLevel);
}
}