
http://bugzilla.qos.ch/show_bug.cgi?id=35 ------- Comment #2 from sdavids@gmx.de 2007-01-04 08:36 ------- package ch.qos.logback.classic; import java.lang.reflect.Field; import java.util.Map; import java.util.Set; import org.slf4j.ILoggerFactory; import org.slf4j.LoggerFactory; /** * Logging is the implementation class of LoggingMBean. * <p> * The <code>LoggingMBean</code> interface provides a standard method for management access to the individual * <code>ch.qos.logback.classic.Logger</code> objects available at runtime. * </p> * <h3>Example Usage</h3> * <pre> ObjectName on = new ObjectName("ch.qos.logback.classic:type=Logging"); * Logging mbean = new Logging(); * if (mbs.isRegistered(on)) { * mbs.unregisterMBean(on); * } * mbs.registerMBean(mbean, on);</pre> * * @author Sebastian Davids, <a href="mailto:sebastian@davids.name">sebastian@davids.name</a> * @see javax.management * @see Logger */ public class Logging implements LoggingMBean { private static final String EMPTY_STRING = ""; //$NON-NLS-1$ private static final String[] EMPTY_STRING_ARRAY = new String[0]; /** {@inheritDoc} */ public String getLoggerLevel(String loggerName) { ILoggerFactory factory = LoggerFactory.getILoggerFactory(); if (factory instanceof LoggerContext) { LoggerContext context = (LoggerContext) factory; Logger logger = context.exists(loggerName); if (logger == null) { return null; } Level level = logger.getLevel(); return level == null ? EMPTY_STRING : level.toString(); } // ILoggerFactory#getLogger(loggerName) would create a new logger // so always return null (logger does not exist) even if it actually does return null; } /** {@inheritDoc} */ @SuppressWarnings("unchecked") public String[] getLoggerNames() { ILoggerFactory factory = LoggerFactory.getILoggerFactory(); if (factory instanceof LoggerContext) { LoggerContext context = (LoggerContext) factory; // loggerCache is not accessible so use reflection try { Field loggerCacheField = LoggerContext.class.getDeclaredField("loggerCache"); //$NON-NLS-1$ loggerCacheField.setAccessible(true); Map<String, Logger> loggerCache = (Map<String, Logger>) loggerCacheField.get(context); if (loggerCache == null) { return EMPTY_STRING_ARRAY; } Set<String> loggerNames = loggerCache.keySet(); return loggerNames.toArray(new String[loggerNames.size()]); } catch (ClassCastException e) { return EMPTY_STRING_ARRAY; } catch (SecurityException e) { return EMPTY_STRING_ARRAY; } catch (NoSuchFieldException e) { return EMPTY_STRING_ARRAY; } catch (IllegalArgumentException e) { return EMPTY_STRING_ARRAY; } catch (IllegalAccessException e) { return EMPTY_STRING_ARRAY; } } return EMPTY_STRING_ARRAY; } /** {@inheritDoc} */ public void setLoggerLevel(String loggerName, String levelName) { if (loggerName == null) { throw new NullPointerException("loggerName is null"); //$NON-NLS-1$ } ILoggerFactory factory = LoggerFactory.getILoggerFactory(); if (factory instanceof LoggerContext) { LoggerContext context = (LoggerContext) factory; Logger logger = context.exists(loggerName); if (logger == null) { throw new IllegalArgumentException("Logger " + loggerName + "does not exist"); //$NON-NLS-1$//$NON-NLS-2$ } Level level = Level.toLevel(levelName); logger.setLevel(level); } // ILoggerFactory#getLogger(loggerName) would create a new logger // so fail silently } } -- Configure bugmail: http://bugzilla.qos.ch/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee.