[logback-dev] svn commit: r2034 - in logback/trunk: . logback-classic logback-classic/src/main/java/ch/qos/logback/classic/selector logback-classic/src/test/java/org/slf4j/impl logback-classic/src/test/resources logback-site/src/site/pages logback-site/src/site/pages/manual

noreply.ceki at qos.ch noreply.ceki at qos.ch
Fri Nov 28 21:34:30 CET 2008


Author: ceki
Date: Fri Nov 28 21:34:30 2008
New Revision: 2034

Added:
   logback/trunk/logback-site/src/site/pages/manual/.htaccess
   logback/trunk/logback-site/src/site/pages/manual/loggingSeparation.html
Modified:
   logback/trunk/logback-classic/pom.xml
   logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/ContextJNDISelector.java
   logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java
   logback/trunk/logback-classic/src/test/resources/autoConfigAsResource.xml
   logback/trunk/logback-site/src/site/pages/download.html
   logback/trunk/logback-site/src/site/pages/manual/index.html
   logback/trunk/logback-site/src/site/pages/manual/menu.js
   logback/trunk/logback-site/src/site/pages/news.html
   logback/trunk/pom.xml

Log:
- rewrote the "contextSelector.html" chapter. The chapter was renamed as "loggingSeparation.html"
- logback now uses slf4j version 1.5.6
- ContextJNDISelector was refactored. The config file name for a new logger context is based on convention "logback-CONTEXTNAME.xml" 
  This obviates the need to set the "logback/configuration-resource" JNDI env-entry.

Modified: logback/trunk/logback-classic/pom.xml
==============================================================================
--- logback/trunk/logback-classic/pom.xml	(original)
+++ logback/trunk/logback-classic/pom.xml	Fri Nov 28 21:34:30 2008
@@ -48,7 +48,6 @@
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-ext</artifactId>
-      <version>${slf4j.version}</version>
       <scope>compile</scope>
     </dependency>
     

Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/ContextJNDISelector.java
==============================================================================
--- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/ContextJNDISelector.java	(original)
+++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/selector/ContextJNDISelector.java	Fri Nov 28 21:34:30 2008
@@ -22,13 +22,14 @@
 import javax.naming.Context;
 import javax.naming.NamingException;
 
-import org.slf4j.Logger;
-
 import ch.qos.logback.classic.LoggerContext;
 import ch.qos.logback.classic.joran.JoranConfigurator;
 import ch.qos.logback.classic.util.ContextInitializer;
 import ch.qos.logback.classic.util.JNDIUtil;
 import ch.qos.logback.core.joran.spi.JoranException;
+import ch.qos.logback.core.status.InfoStatus;
+import ch.qos.logback.core.status.StatusManager;
+import ch.qos.logback.core.status.WarnStatus;
 import ch.qos.logback.core.util.Loader;
 import ch.qos.logback.core.util.StatusPrinter;
 
@@ -56,6 +57,14 @@
     defaultContext = context;
   }
 
+  public LoggerContext getDefaultLoggerContext() {
+    return defaultContext;
+  }
+
+  public LoggerContext detachLoggerContext(String loggerContextName) {
+    return contextMap.remove(loggerContextName);
+  }
+
   public LoggerContext getLoggerContext() {
     String contextName = null;
     Context ctx = null;
@@ -87,49 +96,68 @@
         loggerContext = new LoggerContext();
         loggerContext.setName(contextName);
         contextMap.put(contextName, loggerContext);
-
-        // Do we have a dedicated configuration file?
-        String configFilePath = JNDIUtil.lookup(ctx,
-            JNDI_CONFIGURATION_RESOURCE);
-        if (configFilePath != null) {
-          configureLoggerContextByResource(loggerContext, configFilePath);
+        URL url = findConfigFileURL(ctx, loggerContext);
+        if (url != null) {
+          configureLoggerContextByURL(loggerContext, url);
         } else {
           try {
             new ContextInitializer(loggerContext).autoConfig();
-          } catch(JoranException je) {
-            StatusPrinter.print(loggerContext);
+          } catch (JoranException je) {
           }
         }
+        StatusPrinter.printIfErrorsOccured(loggerContext);
       }
       return loggerContext;
     }
   }
 
-  public LoggerContext getDefaultLoggerContext() {
-    return defaultContext;
+  private String conventionalConfigFileName(String contextName) {
+    return "logback-" + contextName + ".xml";
   }
 
-  public LoggerContext detachLoggerContext(String loggerContextName) {
-    return contextMap.remove(loggerContextName);
-  }
+  private URL findConfigFileURL(Context ctx, LoggerContext loggerContext) {
+    StatusManager sm = loggerContext.getStatusManager();
 
-  private void configureLoggerContextByResource(LoggerContext context,
-      String configFilePath) {
-    URL url = Loader.getResourceBySelfClassLoader(configFilePath);
-    if (url != null) {
-      try {
-        JoranConfigurator configurator = new JoranConfigurator();
-        context.reset();
-        configurator.setContext(context);
-        configurator.doConfigure(url);
-      } catch (JoranException e) {
-        StatusPrinter.print(context);
+    String jndiEntryForConfigResource = JNDIUtil.lookup(ctx,
+        JNDI_CONFIGURATION_RESOURCE);
+    // Do we have a dedicated configuration file?
+    if (jndiEntryForConfigResource != null) {
+      sm.add(new InfoStatus("Searching for [" + jndiEntryForConfigResource
+          + "]", this));
+      URL url = urlByResourceName(sm, jndiEntryForConfigResource);
+      if (url == null) {
+        String msg = "The jndi resource [" + jndiEntryForConfigResource
+            + "] for context [" + loggerContext.getName()
+            + "] does not lead to a valid file";
+        sm.add(new WarnStatus(msg, this));
       }
+      return url;
     } else {
-      Logger logger = defaultContext.getLogger(LoggerContext.ROOT_NAME);
-      logger.warn("The provided URL for context" + context.getName()
-          + " does not lead to a valid file");
+      String resourceByConvention = conventionalConfigFileName(loggerContext
+          .getName());
+      return urlByResourceName(sm, resourceByConvention);
+    }
+  }
+
+  private URL urlByResourceName(StatusManager sm, String resourceName) {
+    sm.add(new InfoStatus("Searching for [" + resourceName + "]",
+        this));
+    URL url = Loader.getResource(resourceName, Loader.getTCL());
+    if (url != null) {
+      return url;
+    }
+    return Loader.getResourceBySelfClassLoader(resourceName);
+  }
+
+  private void configureLoggerContextByURL(LoggerContext context, URL url) {
+    try {
+      JoranConfigurator configurator = new JoranConfigurator();
+      context.reset();
+      configurator.setContext(context);
+      configurator.doConfigure(url);
+    } catch (JoranException e) {
     }
+    StatusPrinter.printIfErrorsOccured(context);
   }
 
   public List<String> getContextNames() {

Modified: logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java
==============================================================================
--- logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java	(original)
+++ logback/trunk/logback-classic/src/test/java/org/slf4j/impl/RecursiveInitializationTest.java	Fri Nov 28 21:34:30 2008
@@ -1,9 +1,7 @@
 package org.slf4j.impl;
 
-import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 
-import java.util.List;
 import java.util.Random;
 
 import org.junit.After;
@@ -17,7 +15,7 @@
 import ch.qos.logback.classic.util.ContextInitializer;
 import ch.qos.logback.core.status.Status;
 import ch.qos.logback.core.status.StatusManager;
-
+import ch.qos.logback.core.util.StatusPrinter;
 
 public class RecursiveInitializationTest {
 
@@ -27,7 +25,9 @@
   public void setUp() throws Exception {
     System.setProperty(ContextInitializer.CONFIG_FILE_PROPERTY,
         "recursiveInit.xml");
+    StaticLoggerBinderFriend.reset();
     LoggerFactoryFriend.reset();
+
   }
 
   @After
@@ -43,25 +43,9 @@
 
     LoggerContext loggerContext = (LoggerContext) LoggerFactory
         .getILoggerFactory();
+    StatusPrinter.printIfErrorsOccured(loggerContext);
     StatusManager sm = loggerContext.getStatusManager();
-
-    assertEquals("Was expecting no errors", Status.INFO, sm.getLevel());
-    
-    List<Status> statusList = sm.getCopyOfStatusList();
-//    int errorCount = 0;
-//    
-//    for(Status s: statusList) {
-//      if(s.getLevel() == Status.ERROR) {
-//        errorCount++;
-//        System.out.println("==========================");
-//        System.out.println(s);
-//        System.out.println("==========================");
-//        
-//        assertNull("Status ["+s+"] has a throwable", s.getThrowable());
-//      }
-//    }
-    // Error msg: No appenders present in context [default] for logger [ResursiveLBAppender..].
-//    assertEquals("Expecting only one error", 1, errorCount);
-    }
+    assertEquals("Was expecting no errors", Status.WARN, sm.getLevel());
+  }
 
 }

Modified: logback/trunk/logback-classic/src/test/resources/autoConfigAsResource.xml
==============================================================================
--- logback/trunk/logback-classic/src/test/resources/autoConfigAsResource.xml	(original)
+++ logback/trunk/logback-classic/src/test/resources/autoConfigAsResource.xml	Fri Nov 28 21:34:30 2008
@@ -2,15 +2,14 @@
 
 <configuration>
 
-	<appender name="AUTO_BY_SYSTEM_PROPERTY" class="ch.qos.logback.core.ConsoleAppender">
-		<layout class="ch.qos.logback.classic.PatternLayout">
-			<pattern>%msg%n"</pattern>
-		</layout>
-	</appender>
+  <appender name="AUTO_BY_SYSTEM_PROPERTY"
+    class="ch.qos.logback.core.ConsoleAppender">
+    <layout class="ch.qos.logback.classic.PatternLayout">
+      <pattern>%msg%n"</pattern>
+    </layout>
+  </appender>
 
-	<root>
-		<level value="debug" />
-		<appender-ref ref="AUTO_BY_SYSTEM_PROPERTY" />
-
-	</root>
+  <root level="debug">
+    <appender-ref ref="AUTO_BY_SYSTEM_PROPERTY" />
+  </root>
 </configuration>

Modified: logback/trunk/logback-site/src/site/pages/download.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/download.html	(original)
+++ logback/trunk/logback-site/src/site/pages/download.html	Fri Nov 28 21:34:30 2008
@@ -27,7 +27,7 @@
 
 		<ul>
       <li><a href="dist/logback-${pom.version}.zip">logback-${pom.version}.zip</a></li>
-      <li><a href="dist/logback-${pom.version}.tar.gz">logback-${pom.version}.tar.gz</a></li>
+      <li><a href="dist/logback-${project.version}.tar.gz">logback-${pom.version}.tar.gz</a></li>
 		</ul>
 		
 		

Added: logback/trunk/logback-site/src/site/pages/manual/.htaccess
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/manual/.htaccess	Fri Nov 28 21:34:30 2008
@@ -0,0 +1 @@
+Redirect contextSelector.html loggingSeparation.html
\ No newline at end of file

Modified: logback/trunk/logback-site/src/site/pages/manual/index.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/manual/index.html	(original)
+++ logback/trunk/logback-site/src/site/pages/manual/index.html	Fri Nov 28 21:34:30 2008
@@ -101,7 +101,7 @@
         </p></li>
 
         <li><p>
-          <a href="contextSelector.html"><b>Chapter 8: Context Selector</b></a>
+          <a href="loggingSeparation.html"><b>Chapter 8: Logging Separation</b></a>
         </p></li>
         
         <li><p>

Added: logback/trunk/logback-site/src/site/pages/manual/loggingSeparation.html
==============================================================================
--- (empty file)
+++ logback/trunk/logback-site/src/site/pages/manual/loggingSeparation.html	Fri Nov 28 21:34:30 2008
@@ -0,0 +1,290 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
+    <title>Chapter 8: Context Selector</title>
+    <link rel="stylesheet" type="text/css" href="../css/common.css" />
+    <link rel="stylesheet" type="text/css" href="../css/screen.css" media="screen" />
+    <link rel="stylesheet" type="text/css" href="../css/_print.css" media="print" />
+    
+  </head>
+  <body>
+    <script type="text/javascript">prefix='../';</script>
+    <script src="../templates/header.js" type="text/javascript"></script>
+    <div id="left">
+      <script src="../templates/left.js" type="text/javascript"></script>
+    </div>
+    <div id="right">
+      <script src="menu.js" type="text/javascript"></script>
+    </div>
+    <div id="content">	
+	
+    <h2>Chapter 9: Context Selectors</h2>
+      
+    <div class="quote">
+      <p><em>It is not knowledge, but the act of learning, not
+      possession but the act of getting there, which grants the greatest
+      enjoyment. When I have clarified and exhausted a subject, then I
+      turn away from it, in order to go into darkness again; the
+      never-satisfied man is so strange if he has completed a structure,
+      then it is not in order to dwell in it peacefully, but in order to
+      begin another. I imagine the world conqueror must feel thus, who,
+      after one kingdom is scarcely conquered, stretches out his arms
+      for others.</em></p>
+
+      <p>&mdash;KARL FRIEDRICH GAUSS, Letter to Bolyai, 1808.</p>
+
+      <p><em>Style, like sheer silk, too often hides eczema.</em></p>
+      
+      <p>&mdash;ALBERT CAMUS, <em>The Fall</em></p>
+
+    </div>
+
+    <script src="../templates/creative.js" type="text/javascript"></script>		
+    <script src="../templates/setup.js" type="text/javascript"></script>
+
+    <h2>The problem: Logging Separation</h2>
+
+    <p>The chapter deals with a relatively difficult problem of
+    providing a separate logging environment for multiple applications
+    running on the same web or EJB container. In the remainder of this
+    chapter the term "application" will be used to refer either a
+    web-application or a J2EE application interchangeably.  In a
+    separated logging environment, each application sees a distinct
+    logback environment, so that the logback configuration of one
+    application does not interfere with the settings of another. In
+    more technical terms, each web-application has a distinct copy of
+    <code>LoggerContext</code> reserved for its own use. Recall that
+    in logback, each logger object is manufactured by a
+    <code>LoggerContext</code> to which it remains attached for as
+    long as the logger object lives in memory. A variant of this
+    problem is the separation of application logging and the logging
+    of the container itself.
+    </p>
+
+    <h2>The simplest and easiest approach</h2>
+
+    <p>Assuming your container supports child first class loading,
+    separation of logging can be accomplished by embedding a copy of
+    slf4j and logback jar files in each of your applications. For
+    web-applications, placing slf4j and logback jar files under the
+    <em>WEB-INF/lib</em> directory of the web-application is
+    sufficient to endow each web-application with a separate logging
+    environment. A copy of the <em>logback.xml</em> configuration file
+    placed under <em>WEB-INF/classes</em> will be picked up when
+    logback is loaded into memory. 
+    </p>
+
+    <p>By virtue of class loader separation provided by the container,
+    each web-application will load its own copy of
+    <code>LoggerContext</code> which will pickup its own copy of
+    <em>logback.xml</em>.</p>
+    
+    <p>Easy as pie.</p>
+
+    <p>Well, not exactly. First, although most do, not all containers
+    support child first class loading. Second, logging generated by
+    shared libraries will not be separated. The common idiom for
+    referencing a logger is via a static reference. For example,
+    </p>
+
+    <p class="source">public class Foo {
+  <b>static</b> Logger logger = LoggerFactory.getLogger(Foo.class);
+  ...
+}</p>
+
+    <p>Static references are both memory and CPU efficient. Only one
+    logger reference is used for all instances of the class. Moreover,
+    the logger instance is retrieved only once, when the class is
+    loaded into memory. Static logger references are fine as long as
+    they are used in classes loaded by different class
+    loaders. However, when a class is loaded by a parent class loader
+    common to multiple applications, then the shared class in question
+    will be loaded once and for all applications. If the shared class
+    contains a static logger reference, than the logger will be
+    retrieved once, when the shared class is loaded into memory and
+    initialized. Moreover, for the shared class to successfully load
+    into memory, slf4j and logback classed must be resolvable by the
+    parent class loader.  This implies that slf4j and logback jar
+    files must also be accessible to the parent class loader. Note
+    that for this scenario to occur a class must be shared
+    <em>and</em> use slf4j, which is somewhat uncommon.
+    </p>
+
+    <p>However, if the container itself uses SLF4J and defaults to
+    parent-first class loading, then you need context selectors. Read
+    on.
+    </p>
+
+    <h2>Context Selectors</h2>
+
+
+    <p>Logback provides a mechanism for a single instance of SLF4J and
+    logback classes loaded into memory to provide multiple logger
+    contexts. When you write:
+    </p>
+
+    <p class="source">Logger logger = LoggerFactory.getLogger("foo");</p>
+
+    <p>the <code>getLogger</code>() method in
+    <code>LoggerFactory</code> class asks the SLF4J binding for a
+    <code>ILoggerFactory</code>. When SLF4J is bound to logback, the
+    task of returning an <code>ILoggerFactory</code> is delegated to
+    an instance of <a
+    href="../apidocs/ch/qos/logback/classic/selector/ContextSelector.html">ContextSelector</a>. Note
+    that <code>ContextSelector</code> implementations always return
+    instances of the <code>LoggerContext</code> class. This class
+    implements the <code>ILoggerFactory</code> interface.  In other
+    words, a context selector has the option to returning any
+    <code>LoggerContext</code> instance it sees fit according to its
+    own criteria. Hence the name context <em>selector</em>.
+    </p>
+
+    <p>By default, the logback binding uses <a
+    href="../xref/ch/qos/logback/classic/selector/DefaultContextSelector.html">DefaultContextSelector</a>
+    which always returns the same <code>LoggerContext</code>, called
+    the default logger context.</p>
+
+    <p>You can specify a different context selector by setting the
+    <em>logback.ContextSelector</em> system property. Suppose you
+    would like to specify that context selector to an instance of the
+    <code>myPackage.myContextSelector</code> class, you would add the
+    following system property: </p>
+
+    <p class="source">-Dlogback.ContextSelector=myPackage.myContextSelector</p>
+
+
+    <h3>ContextJNDISelector</h3>
+
+    <p>Logback-classic ships with a selector called
+    <code>ContextJNDISelector</code> which selects the logger context
+    based on data available in JNDI. This leverages JNDI data
+    separation mandated by the J2EE specification. The same
+    environment variable can be set to carry a different value in each
+    application.
+    </p>
+
+    <p>To enable <code>ContextJNDISelector</code>, the
+    <em>logback.ContextSelector</em> system property needs to be set
+    to "JNDI", as follows:</p>
+
+    <p class="source">-Dlogback.ContextSelector=JNDI</p>
+
+    <p>Note that JNDI is a convenient shorthand for
+    "ch.qos.logback.classic.selector.ContextJNDISelector".</p>
+
+    <h3>Setting JNDI variables in applications</h3>
+    
+    <p>In each of your applications, you need to name the logging
+    context for the application. For a web-application, JNDI
+    environment entries are specified within the <em>web.xml</em>
+    file. If "kenobi" was the name of your application, you would add
+    the following XML element to kenobi's web.xml file:</p>
+
+    <p class="source">&lt;env-entry>
+  &lt;env-entry-name>logback/context-name&lt;/env-entry-name>
+  &lt;env-entry-type>java.lang.String&lt;/env-entry-type>
+  &lt;env-entry-value>kenobi&lt;/env-entry-value>
+&lt;/env-entry></p>
+
+    <p>Assuming you have enabled <code>ContextJNDISelector</code>,
+    logging for Kenobi will be done using a logger context named
+    "kenobi". Moreover, the "kenobi" logger context will be
+    initialized by <em>convention</em> using the configuration file
+    called <em>logback-kenobi.xml</em> which should be packaged within
+    Kenobi web-application under the <em>WEB-INF/classes</em> folder.
+    </p>
+
+    <p>Although not required, you may specify a different
+    configuration file other than the convention, by setting the
+    "logback/configuration-resource" JNDI variable. For example, if
+    you wish to specify <em>my_config.xml</em> instead of the
+    conventional <em>logback-kenobi.xml</em>, you would add the
+    following XML element to web.xml
+    </p>
+
+
+   <p class="source">&lt;env-entry>
+  &lt;env-entry-name>logback/configuration-resource&lt;/env-entry-name>
+  &lt;env-entry-type>java.lang.String&lt;/env-entry-type>
+  &lt;env-entry-value>my_config.xml&lt;/env-entry-value>
+&lt;/env-entry></p> 
+
+
+    <h3>Configuring Tomcat for ContextJNDISelector</h3>
+
+    <p>First, place the logback jars (that is
+    logback-classic-${project.version}.jar,
+    logback-core-${project.version}.jar and
+    slf4j-api-${slff4j.version}.jar) in Tomcat's global (shared) class
+    folder. In Tomcat 6.x, this directory is
+    <em>$TOMCAT_HOME/lib/</em>.
+    </p>
+
+    <p>The <em>logback.ContextSelector</em> system property can be set
+    by adding the following line to the <em>catalina.sh</em> script,
+    catalina.bat in Windows, found under <em>$TOMCAT_HOME/bin</em>
+    folder.</p>
+
+    <p class="source">JAVA_OPTS="$JAVA_OPTS -Dlogback.ContextSelector=JNDI</p>
+
+
+    <h3>Hot deploying applications</h3>
+
+
+    <p>When the web-application is recycled or shutdown, we strongly
+    recommend that the older <code>LoggerContext</code> be closed and
+    subsequently discarded. Logback ships with a
+    <code>ServletContextListener</code> called
+    <code>ContextDetachingSCL</code>, designed specifically for
+    detaching the <code>ContextSelector</code> instance associated
+    with the older web-application instance. In order to install it,
+    add the following lines to your web-applications <em>web.xml</em>
+    file.</p>
+
+    <p class="source">&lt;listener>
+  &lt;listener-class>ch.qos.logback.classic.selector.servlet.ContextDetachingSCL&lt;/listener-class>
+&lt;/listener></p>
+
+    <h3>Better performance</h3>
+
+    <p>When <code>ContextJNDISelector</code> is active, each time a
+    logger is retrieved, a JNDI lookup must be performed. This can
+    negatively impact performance, especially if you are using
+    non-static (aka instance) logger references. Logback ships with a
+    servlet filter named <a
+    href="../xref/ch/qos/logback/classic/selector/servlet/LoggerContextFilter.html">LoggerContextFilter</a>,
+    specifically designed to circumvent the JNDI lookup cost. It can
+    be installed by adding the following lines to your applications
+    web.xml file.</p>
+
+ <p class="source">&lt;filter>
+  &lt;filter-name>LoggerContextFilter&lt;/filter-name>
+  &lt;filter-class>ch.qos.logback.classic.selector.servlet.LoggerContextFilter&lt;/filter-class>
+&lt;/filter>
+&lt;filter-mapping>
+  &lt;filter-name>LoggerContextFilter&lt;/filter-name>
+  &lt;url-pattern>/*&lt;/url-pattern>
+&lt;/filter-mapping></p>
+
+   <p>At the beginning of each http-request,
+   <code>LoggerContextFilter</code> will obtain the logger context
+   associated with the application and then place it in a
+   <code>ThreadLocal</code> variable. <code>ContextJNDISelector</code>
+   will first check if the said <code>ThreadLocal</code> variable is
+   set. If it is set, then JNDI lookup will skipped. Note that at the
+   end of the http request, the <code>ThreadLocal</code> variable will
+   be nulled.  Installing <code>LoggerContextFilter</code> improves
+   logger retrieval performance by a wide margin.
+   </p>
+
+   <p>Nulling the <code>ThreadLocal</code> variable allows garbage
+   collection of the web-application when it is stopped or
+   recycled.</p>
+
+  <script src="../templates/footer.js" type="text/javascript"></script>
+</div>
+</body>
+</html>

Modified: logback/trunk/logback-site/src/site/pages/manual/menu.js
==============================================================================
--- logback/trunk/logback-site/src/site/pages/manual/menu.js	(original)
+++ logback/trunk/logback-site/src/site/pages/manual/menu.js	Fri Nov 28 21:34:30 2008
@@ -7,5 +7,5 @@
 document.write('<p class="menu"><a href="layouts.html"><b>Ch5: Layouts</b></a>');
 document.write('<p class="menu"><a href="filters.html"><b>Ch6: Filter chains</b></a>');
 document.write('<p class="menu"><a href="mdc.html"><b>Ch7: Mapped Diagnostic Contexts</b></a>');
-document.write('<p class="menu"><a href="contextSelector.html"><b>Ch8: Context Selectors</b></a>');
+document.write('<p class="menu"><a href="loggingSeparation.html"><b>Ch8: Logging Separation</b></a>');
 document.write('<p class="menu"><a href="jmxConfig.html"><b>Ch9: JMX Configurator</b></a>');

Modified: logback/trunk/logback-site/src/site/pages/news.html
==============================================================================
--- logback/trunk/logback-site/src/site/pages/news.html	(original)
+++ logback/trunk/logback-site/src/site/pages/news.html	Fri Nov 28 21:34:30 2008
@@ -84,31 +84,35 @@
     files from classpath resources.
     </p>
 
+    <p>Fixed <a
+    href="http://jira.qos.ch/browse/LBCLASSIC-86">LBCLASSIC-86</a>
+    related to <code>AccessControlException</code> thrown when run in
+    a JVM with a <code>SecurityManager</code>.
+    </p>
 
-  <!-- ======================== minor ================== -->
 
-  <p>Fixed <a href="http://jira.qos.ch/browse/LBCLASSIC-69">bug
-  LBCLASSIC-69</a> reported by Anton Tagunov. The
-  LevelToSyslogSeverity now correctly handles the TRACE level.
-  </p>
+    <!-- ======================== minor ================== -->
 
-  <p>Fixed <a href="http://jira.qos.ch/browse/LBCLASSIC-57">bug
-  LBCLASSIC-57</a> reported by Anton Tagunov. SyslogAppender could
-  overwhelm the Syslog server with very large messages. SyslogAppender
-  now limits its message size to 256K.
-  </p>
+    <p>Fixed <a href="http://jira.qos.ch/browse/LBCLASSIC-69">bug
+    LBCLASSIC-69</a> reported by Anton Tagunov. The
+    LevelToSyslogSeverity now correctly handles the TRACE level.
+    </p>
 
+    <p>Fixed <a href="http://jira.qos.ch/browse/LBCLASSIC-57">bug
+    LBCLASSIC-57</a> reported by Anton Tagunov. SyslogAppender could
+    overwhelm the Syslog server with very large messages. SyslogAppender
+    now limits its message size to 256K.
+    </p>
 
-  <p>Fixed issue <a
-  href="http://jira.qos.ch/browse/LBCLASSIC-49">LBCLASSIC-49</a>
-  reported by Oliver Lietz. The getLogger() method in
-  <code>LoggerContext</code> class will now throw an
-  <code>IllegalArgumentException</code> when invoked with a null
-  argument.
-  </p>
 
+    <p>Fixed issue <a
+    href="http://jira.qos.ch/browse/LBCLASSIC-49">LBCLASSIC-49</a>
+    reported by Oliver Lietz. The getLogger() method in
+    <code>LoggerContext</code> class will now throw an
+    <code>IllegalArgumentException</code> when invoked with a null
+    argument.
+    </p>
 
-  
 
   <hr width="80%" align="center" />
 

Modified: logback/trunk/pom.xml
==============================================================================
--- logback/trunk/pom.xml	(original)
+++ logback/trunk/pom.xml	Fri Nov 28 21:34:30 2008
@@ -36,8 +36,7 @@
   
   <properties>
     <!-- slf4j.version property is used below and in setClasspath.cmd -->
-    <slf4j.version>1.5.6-SNAPSHOT</slf4j.version>
-    <slf4j.ext.version>1.0-alpha0</slf4j.ext.version>
+    <slf4j.version>1.5.6</slf4j.version>
     <consolePlugin.version>1.1.0</consolePlugin.version>  
   </properties>
   
@@ -81,7 +80,7 @@
       <dependency>
         <groupId>org.slf4j</groupId>
         <artifactId>slf4j-ext</artifactId>
-        <version>${slf4j.ext.version}</version>
+        <version>${slf4j.version}</version>
       </dependency>
 		
       <dependency>


More information about the logback-dev mailing list