svn commit: r1179 - in logback/trunk: logback-classic/src/main/java/ch/qos/logback/classic logback-classic/src/main/java/ch/qos/logback/classic/jmx logback-site/src/site/xdocTemplates

Author: seb Date: Tue Jan 9 14:43:00 2007 New Revision: 1179 Added: logback/trunk/logback-site/src/site/xdocTemplates/jmxConfig.xml Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/Configurator.java logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/ConfiguratorMBean.java logback/trunk/logback-site/src/site/xdocTemplates/access.xml logback/trunk/logback-site/src/site/xdocTemplates/documentation.xml Log: JMX confgurator now allows to retrieve level and effective level information for a logger passed as a parameter. Added a doc about the jmx Configurator Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/Logger.java Tue Jan 9 14:43:00 2007 @@ -89,7 +89,7 @@ instanceCount++; } - final Level getEffectiveLevel() { + public final Level getEffectiveLevel() { return Level.toLevel(effectiveLevelInt); } Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/LoggerContext.java Tue Jan 9 14:43:00 2007 @@ -160,7 +160,7 @@ * @param name * the name of the logger to search for. */ - Logger exists(String name) { + public Logger exists(String name) { return (Logger) loggerCache.get(name); } Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/Configurator.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/Configurator.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/Configurator.java Tue Jan 9 14:43:00 2007 @@ -13,6 +13,8 @@ public class Configurator extends ContextAwareBase implements ConfiguratorMBean { + private static String EMPTY = ""; + public Configurator(LoggerContext loggerContext) { this.context = loggerContext; } @@ -67,4 +69,38 @@ } } + public String getLoggerLevel(String loggerName) { + if (loggerName == null) { + return EMPTY; + } + + loggerName = loggerName.trim(); + + LoggerContext lc = (LoggerContext) context; + Logger logger = lc.exists(loggerName); + if (logger != null) { + return logger.getLevel().toString(); + } else { + return EMPTY; + } + } + + public String getLoggerEffectiveLevel(String loggerName) { + if (loggerName == null) { + return EMPTY; + } + + loggerName = loggerName.trim(); + + LoggerContext lc = (LoggerContext) context; + Logger logger = lc.exists(loggerName); + if (logger != null) { + return logger.getEffectiveLevel().toString(); + } else { + return EMPTY; + } + } + + + } Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/ConfiguratorMBean.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/ConfiguratorMBean.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/jmx/ConfiguratorMBean.java Tue Jan 9 14:43:00 2007 @@ -13,5 +13,9 @@ public void reload(URL url) throws JoranException; public void setLoggerLevel(String loggerName, String levelStr); + + public String getLoggerLevel(String loggerName); + + public String getLoggerEffectiveLevel(String loggerName); } Modified: logback/trunk/logback-site/src/site/xdocTemplates/access.xml ============================================================================== --- logback/trunk/logback-site/src/site/xdocTemplates/access.xml (original) +++ logback/trunk/logback-site/src/site/xdocTemplates/access.xml Tue Jan 9 14:43:00 2007 @@ -313,7 +313,7 @@ CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"</pre></div> <p> - Once started with these options, Tomcat's JMX compoenents can be access + Once started with these options, Tomcat's JMX compoenents can be accessed with JConsole by issuing the following command in a shell: </p> <div class="source"><pre>jconsole &</pre></div> Modified: logback/trunk/logback-site/src/site/xdocTemplates/documentation.xml ============================================================================== --- logback/trunk/logback-site/src/site/xdocTemplates/documentation.xml (original) +++ logback/trunk/logback-site/src/site/xdocTemplates/documentation.xml Tue Jan 9 14:43:00 2007 @@ -22,7 +22,7 @@ <li><a href="manual/index.html"><b>The logback manual</b></a></li> <li> - <a href="access.html">An introduction to access for Jetty + <a href="access.html">An introduction to logback-access for Jetty and Tomcat</a> </li> <li> @@ -31,6 +31,9 @@ <li> <a href="bridge.html">How to use the log4j bridge</a> </li> + <li> + <a href="jmxConfig.html">How to use the logback JMX Configurator</a> + </li> </ul> <p>Source code related documentation:</p> Added: logback/trunk/logback-site/src/site/xdocTemplates/jmxConfig.xml ============================================================================== --- (empty file) +++ logback/trunk/logback-site/src/site/xdocTemplates/jmxConfig.xml Tue Jan 9 14:43:00 2007 @@ -0,0 +1,180 @@ +<?xml version="1.0"?> +<document> + + <properties> + <author email="ceki at qos ddoott ch ">Ceki Gulcu</author> + <author email="sebastien at qos ddoott ch ">Sebastien Pennec</author> + <title>JMX Configurator</title> + </properties> + + <body> + + <h2>JMX Configurator</h2> + + <p> + As of version 0.8, logback ships with a component that allows + configuration via JMX. Basically, it lets you reload the current + configuration, load a new one, or modify logger levels. + </p> + + <h3>Configuring your server</h3> + <p> + The first step is to make sure that your application server will + allow the JMX Configurator to publish itself. In this document, + we'll cover the necessary steps in Tomcat and Jetty. + </p> + + <h4>Configuring Tomcat</h4> + <p> + Accessing JMX components with Tomcat requires to add the following lines + to the <em>$TOMCAT_HOME/bin/catalina.sh</em> configuration file: + </p> + +<div class="source"><pre>CATALINA_OPTS="-Dcom.sun.management.jmxremote" +CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.ssl=false" +CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"</pre></div> + + <p> + Once started with these options, Tomcat's JMX compoenents can be accessed + with JConsole by issuing the following command in a shell: + </p> +<div class="source"><pre>jconsole &</pre></div> + + <p> + You might prefer to access your components via a web-based solution using MX4J. + In that case, here are the required steps: + </p> + + <p> + First, <a href="http://mx4j.sourceforge.net/">download MX4J</a>. + Place the <em>mx4j-impl.jar</em> file in + the <em>$TOMCAT_HOME/bin/</em> directory, and the <em>mx4j-tools.jar</em> + in the <em>$TOMCAT_HOME/common/lib/</em> directory. + </p> + + <p>Then, add the following lines to the + <em>$TOMCAT_HOME/bin/catalina.sh</em> configuration file: + </p> + +<div class="source"><pre><!-- at the beginning of the file --> +CATALINA_OPTS="-Dcom.sun.management.jmxremote" +CATALINA_OPTS="$CATALINA_OPTS -Djavax.management.builder.initial=mx4j.server.MX4JMBeanServerBuilder" + +<!-- in the "Add on extra jar files to CLASSPATH" section --> +CLASSPATH="$CLASSPATH":"$CATALINA_HOME"/bin/mx4j-impl.jar</pre></div> + + <p> + Finally, declare a new <code>Connector</code> in the + <em>$TOMCAT_HOME/conf/server.xml</em> file: + </p> + +<div class="source"><pre><Connector port="8050" + handler.list="mx" + mx.enabled="true" + mx.httpHost="localhost" + mx.httpPort="8082" + protocol="AJP/1.3" /></pre></div> + + <p> + Once Tomcat is started, you should be ableo to reach the JMX components by + pointing a browser to the following URL: + </p> + +<div class="source"><pre>http://host_name:8082/</pre></div> + + <h4>Configuring Jetty</h4> + + <p> + Configuring Jetty to publish JMX components requires a few modifications to the + <em>$JETTY_HOME/etc/jetty.xml</em> configuration file. Here are the elements that need to be + added: + </p> + +<div class="source"><pre><Call id="MBeanServer" class="java.lang.management.ManagementFactory" name="getPlatformMBeanServer"/> +<!-- initialize the Jetty MBean container --> +<Get id="Container" name="container"> + <Call name="addEventListener"> + <Arg> + <New class="org.mortbay.management.MBeanContainer"> + <Arg><Ref id="MBeanServer"/></Arg> + <Set name="managementPort">8082</Set> + <Call name="start" /> + </New> + </Arg> + </Call> +</Get></pre></div> + + <p> + Once Jetty is started with this configuration, all available components can be reviewed + at this address: + </p> +<div class="source"><pre>http://host_name:8082/</pre></div> + + + <h3>Using the JMX Configurator</h3> + + <p> + The next step is to declare the JMX Configurator in the logback configuration + file. This is done by adding a single element, as shown below: + </p> + +<div class="source"><pre><configuration> + + <b><jmxConfigurator /></b> + + <appender name="console" class="ch.qos.logback.classic.ConsoleAppender"> + <layout class="ch.qos.logback.classic.PatternLayout"> + <Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern> + </layout> + </appender> + + <root> + <level value="debug"/> + <appender-ref ref="console" /> + </root> +</configuration></pre></div> + + <p> + Once the JMX Configurator is displayed on your screen, there are + several operations available. + </p> + + <ul> + <p>Reload the configuration using the same file that was previously + used. + </p> + <p>Reload the configuration using a file whose path is passed as + a parameter.</p> + <p> + Reload the configuration using a file whose URL is passed as a + parameter. + </p> + <p> + Get the level of a logger + </p> + <p> + Get the effective level of a logger + </p> + <p> + Change the level setting of a specified logger. + </p> + </ul> + + <p> + In the last case, you must specify the name of the logger you wish to + alter, and its new level. + </p> + <p> + The level of a logger is a value that can be null, if no specific level + has been configured for said logger. Its effective level, on the other + hand, is given with respect to the parent loggers' levels. This value cannot + be null, since all loggers are direct or indirect children of the root + logger, whose level is always set. When trying to get the level or effective + level of a logger, the name of the logger has to be passed as a parameter. + Note that trying to get the level or effective level for a nonexistent logger + will not return any result. + </p> + + + </body> +</document> \ No newline at end of file
participants (1)
-
noreply.seb@qos.ch