基于JMX动态配置Log4J日志级别
2014-04-17 09:28
387 查看
package com.minxinloan.common.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动态配置Log4J日志级别,并控制Trace开关的MBean. * * @author z * @version 2013-12-10 */ @ManagedResource(objectName = Log4jManager.MBEAN_NAME, description = "Log4j Management Bean") public class Log4jManager { /** * Log4jManager的Mbean的注册名称. */ public static final String MBEAN_NAME = "log4j:name=Log4j"; private static org.slf4j.Logger managerLogger = LoggerFactory.getLogger(Log4jManager.class); private String projectLoggerName; @ManagedAttribute(description = "Level of the root logger") public String getRootLoggerLevel() { Logger logger = Logger.getRootLogger(); // MBeanServer server = MBeanServerFactory.createMBeanServer(); return logger.getEffectiveLevel().toString(); } @ManagedAttribute public void setRootLoggerLevel(String newLevel) { Logger logger = Logger.getRootLogger(); Level level = Level.toLevel(newLevel); logger.setLevel(level); managerLogger.info("设置Root Logger 级别为{}", newLevel); } /** * 获得项目默认logger的级别. * 项目默认logger名称通过#setProjectLoggerName(String)配置. */ @ManagedAttribute(description = "Level of the project default package logger") public String getProjectLoggerLevel() { if (projectLoggerName != null) { return getLoggerLevel(projectLoggerName); } return null; } /** * 设置项目默认logger的级别. * 项目默认logger名称通过#setProjectLoggerName(String)配置. */ @ManagedAttribute public void setProjectLoggerLevel(String newLevel) { if (projectLoggerName != null) { setLoggerLevel(projectLoggerName, 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); managerLogger.info("设置{}级别为{}", loggerName, newLevel); } /** * 根据log4j.properties中的定义, 设置项目默认的logger名称 */ public void setProjectLoggerName(String projectLoggerName) { this.projectLoggerName = projectLoggerName; } }
import static org.junit.Assert.assertEquals; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.junit.Test; import com.minxinloan.common.log.Log4jManager; public class Log4jManagerTest { @Test public void testLoggerLevel() { String loggerName = "org.springside.modules"; Log4jManager mbean = new Log4jManager(); String orgLevel = mbean.getLoggerLevel(loggerName); Logger.getLogger(loggerName).setLevel(Level.FATAL); assertEquals("FATAL", mbean.getLoggerLevel(loggerName)); mbean.setLoggerLevel(loggerName, "TRACE"); assertEquals("TRACE", mbean.getLoggerLevel(loggerName)); mbean.setLoggerLevel(loggerName, "WRONG_LEVEL_NAME"); assertEquals("DEBUG", mbean.getLoggerLevel(loggerName)); mbean.setLoggerLevel(loggerName, orgLevel); } }
相关文章推荐
- 配置log4j日志动态加载(不重启服务)
- log4j配置文件和日志级别分离
- Log4j按级别输出日志到不同文件配置分析
- 怎么配置log4j.properties才能将同一包中的error和debug级别的日志分别记到两个文件中去?
- log4j自定义不同日志文件及动态配置路径
- 如何通过配置log4j.xml来打印指定类或指定级别的日志信息
- log4j输出多个自定义日志文件,动态配置路径
- 动态设置log4j的日志级别
- 用Spring与Log4J进行动态日志配置切换
- log4j输出多个自定义路径的日志文件,动态配置路径
- Log4j按级别输出日志到不同文件配置分析
- log4j输出多个自定义日志文件,动态配置路径
- Log4j按级别输出日志到不同文件配置分析
- java中程序动态配置log4j日志
- log4j配置文件使其能够打印4个级别的日志到不同的文件中
- log4j输出多个自定义日志文件,动态配置路径
- log4j输出多个自定义日志文件,动态配置路径
- Log4j按级别输出日志到不同文件配置分析
- Log4j2的日志配置文件,log4j2.xml文件的配置(实现控制台输出,各级别分别文件输出,自动压缩等)
- Log4j按级别输出日志到不同文件配置分析