<!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>SLF4J News</title>
    <link rel="stylesheet" type="text/css" media="screen" href="css/site.css" />
    <link rel="stylesheet" type="text/css" href="css/prettify.css" />
  </head>
 <body onload="prettyPrint()">
    <script type="text/javascript">prefix='';</script>
    <script type="text/javascript" src="js/prettify.js"></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="content">
      

   <h1>SLF4J News</h1>

   <p>Please note that you can receive SLF4J related announcements by
   subscribing to the <a
   href="http://www.qos.ch/mailman/listinfo/announce">QOS.ch
   announce</a> mailing list.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>, 2015 - Release of SLF4J 1.7.11</h3>


   <p>Added <code>setThreshold</code> method in
   <code>AppenderSkeleton</code> class in the log4j-over-slf4j
   module. This addition was requested by Dimitrios Liapis who also
   provided the appropriate pull request.
   </p>

   <p>Added <code>getParent</code> method in <code>Category</code>
   class in the log4j-over-slf4j module. This addition was requested
   by Himanshu Bhardwaj in <a
   href="http://jira.qos.ch/browse/SLF4J-318">SLF4J-318</a>.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>6th of January, 2015 - Release of SLF4J 1.7.10</h3>

   <p>The <code>MDC.putCloseable</code> method now explicitly returns
   <code>MDC.MDCloseable</code> instead of the more generic
   <code>java.io.Closeable</code>. This in turn allows one to write
   try-with-resources statement without a catch clause. Many thanks to
   William Delanoue for proposing this change.</p>

   <p>The various constructors in <code>FileAppender</code> in the
   log4j-over-slf4j module are now public.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>16th of December, 2014 - Release of SLF4J 1.7.9</h3>

   <p class="highlight"><a href="codes.html#loggerNameMismatch">Spot
   incorrectly named loggers</a> by setting the
   <code>slf4j.detectLoggerNameMismatch</code> system property to
   true.</p>

   <p><a href="codes.html#loggerNameMismatch">Spot incorrectly named
   loggers</a> by setting the
   <code>slf4j.detectLoggerNameMismatch</code> system property to
   true.  This significant feature was contributed by Alexander
   Dorokhine.</p>

   <p>Added <code>MDC.putCloseable</code> method so that it can be
   used as a <a
   href="https://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html">closeable
   resource</a> under Java 7.</p>

   <p>Added <code>getContext</code> method returning a hashtable in
   org.apache.log4j.MDC in the log4j-over-slf4j module.
   </p>

   <p>The introduction of the @Nonnull JSR 305 annotation in SLF4J
   version 1.7.8 causes the Scala compiler to fail. This is issue has
   been documented in <a
   href="https://issues.scala-lang.org/browse/SI-5420">SI-5420</a>. Given
   that many Scala users will be affected by this issue for the
   foreseeable future, we have decided to renounce the user of JSR 305
   annotations in SLF4J for the time being.
	 </p>

   <p>Numerous small code improvements too minor to be listed
   here.</p>

   <hr noshade="noshade" size="1"/>

   <h3>4th of April, 2014 - Release of SLF4J 1.7.7 </h3>

   <p>SFL4J API now uses generics. This enhancement was contributed by
   Otavio Garcia. Due to erasure of generics in Java, the changes are
   backward-compatible.</p>

   <p>The slf4j-migrator can now convert statements using the long deprecated 
   <code>Category</code> class.</p>

   <p>Added the <code>SimpleLayout</code> and
   <code>FileAppender</code> classes to the log4j-over-slf4j
   module.</p>


   <h3>February 5th, 2014 - Release of SLF4J 1.7.6</h3>

   <p>Added slf4j-android module to the slf4j distribution. This
   module is contributed by Andrey Korzhevskiy.</p>

   <p>Loggers created during the initialization phase are no longer
   <code>NOPLoggers</code> which drop all logging calls. Instead,
   SLF4J now creates substitute loggers which delegate to the
   appropriate logger implementation after the initilization phase
   completes. Only calls made to these loggers during the
   initialization phase are dropped. This enhacement was proposed in
   <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=311">bug 311</a>
   by Chetan Mehrotra.
   </p>

   <p>Improvements to the <code>exit()</code> and
   <code>throwing()</code> methods in <code>XLogger</code>. This
   enhacement was requested in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=197">bug 197</a>.
   </p>
   
   <p>Concunrrency improvement in <code>MessageFormatter</code>. This
   improvement was contributed by Vivek Pathak in a <a
   href="https://github.com/qos-ch/slf4j/pull/52">pull
   request</a>.</p>

   <p>Concunrrency improvement in
   <code>BasicMarkerFactory</code>. This improvement was contributed
   by Mikhail Mazursky in a <a
   href="https://github.com/qos-ch/slf4j/pull/40">pull
   request</a>.</p>

   <p><code>JCLLoggerAdapter</code> was incorrectly invoking
   <code>isDebugEnabled</code> calls in its <code>trace()</code>
   methods. This issue was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=281">bug 281</a>.

   </p>

   <p>In the log4j-over-slf4j module, the <code>setLevel</code>
   method in the <code>Category</code> class. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=279">bug
   279</a>. Alfredo Ramos provied the relevant patch.
   </p>

   <p>In the log4j-over-slf4j module, added empty implementations for
   <code>OptionHander</code>, <code>WriterAppender</code>,
   <code>ConsoleAppender</code> and <code>AppenderSkeleton</code>
   classes.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>25th of March, 2013 - Release of SLF4J 1.7.5</h3>

   <p class="highlight">Given the significance of these performance
   improvements, users are highly encouraged to migrate to SLF4J
   version 1.7.5 or later. </p>

   <p><span class="label notice">performance improvements</span> The
   logger factories in most SLF4J modules namely in jcl-over-slf4j,
   log4j-over-slf4j, slf4j-jcl, slf4j-jdk14, slf4j-log4j12, and
   slf4j-simple now use a <code>ConcurrentHashMap</code> instead of a
   regular <code>HashMap</code> to cache logger instances. This change
   significantly improves logger retrieval times at the cost of some
   memory overhead. This improvement was requested in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=298">bug #298</a>
   by Taras Tielkes who also provided the relevant patch.
   </p>
   

   <hr noshade="noshade" size="1"/>

   <h3>18th of March, 2013 - Release of SLF4J 1.7.4</h3>

   <p>Added a package private <code>reset()</code> method to
   <code>SimpleLoggerFactory</code> for testing purposes.</p>

   <hr noshade="noshade" size="1"/>

   <h3>15th of March, 2013 - Release of SLF4J 1.7.3</h3>

   <p>The jul-to-slf4j bridge now correctly handles cases where the
   message string contains {}-placeholders but has no or zero
   parameters. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=212">bug
   #212</a>. The relevant patch was provided by Matthew Preston in a
   git pull request.</p>
   
   <p>Added missing methods and classes in log4j-over-slf4j module for
   Velocity compatibility.  This issue was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=280">bug 280</a> by
   Thomas Mortagne.</p>

   <hr noshade="noshade" size="1"/>

   <h3>11th of October, 2012 - Release of SLF4J 1.7.2</h3>

   <p>Added osgi-over-slf4j module which serves as an OSGi LogService
   implementation delegating to slf4j. This module is maintained by
   Matt Bishop and Libor Jelinek.</p>

   <p> Christian Trutz added missing PatternLayout class as well as
   several methods in the <code>Logger</code> and
   <code>Category</code> classes. See commit 442e90ba5785cba9 dated
   September 27th 2012 for details.
   </p>

   <p>Added org.slf4j.simpleLoggerwarnLevelString in slf4j-simple
   module.</p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=272">bug
   272</a>. All <code>Logger</code> implementations shipping with
   SLF4J use <code>Object...</code> instead of <code>Object[]</code>
   to avoid compiler warnings.</p>

   

   <hr noshade="noshade" size="1"/>

   <h3>14th of September, 2012 - Release of SLF4J 1.7.1</h3>

   <p><a
   href="apidocs/org/slf4j/impl/SimpleLogger.html"><code>SimpleLogger</code></a>
   now supports writing to a file. The property names for configuring
   <code>SimpleLogger</code> have been modified to be consistently in
   camel case. More configuration options have been added. In the
   absence of configuration directives, <code>SimpleLogger</code> will
   behave exactly the same as in the past. <b>If you are one of the
   few users configuring <code>SimpleLogger</code> with configuration
   properties, you will need to adapt to the new and more consistent
   property names.</b></p>

   <hr noshade="noshade" size="1"/>

   <h3>6th of September, 2012 - Release of SLF4J 1.7.0</h3>

   <p><span class="bold big green">SLF4J now requires JDK 1.5.</span></p>

   <p>Printing methods in the <a
   href="apidocs/org/slf4j/Logger.html">Logger</a> interface now offers
   variants accepting <a
   href="http://docs.oracle.com/javase/1.5.0/docs/guide/language/varargs.html">varargs</a>
   instead of Object[]. Given that under the hood, the Java compiler
   transforms varargs into an array, this change is totally 100%
   no-ifs-or-buts backward compatible with all existing client
   code. </p>

   <p>The logger field (of type <code>java.util.logging.Logger</code>)
   in <code>JDK14LoggerAdapter</code> is now marked as transient. This
   fixes <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=261">bug
   #261</a>, a serialization problem reported by Thorbj&oslash;rn Ravn
   Andersen.</p>

   <hr noshade="noshade" size="1"/>

   <h3>11th of June, 2012 - Release of SLF4J 1.6.6</h3>

   <p>Source repository has been moved to <a
   href="https://github.com/qos-ch/slf4j">https://github.com/qos-ch/slf4j</a>
   on github.</p>
 
   <p>In case multiple bindings are found on the class path, SLF4J
   will now output the name of the framework/implementation class it
   binds with.</p>

   <p><a
   href="apidocs/org/slf4j/impl/SimpleLogger.html">SimpleLogger</a>
   now supports configuration properties. </p>

   <p>LoggerWrapper in the slf4j-ext module now correctly deals with
   markers. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=265">bug #265</a>
   reported by Dario Campagna.</p>

   <p>The log4j-over-slf4j module now supports legacy projects
   providing their own log4j <code>LoggerFactory</code>. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=234">bug #234</a>
   reported by Laurent Pellegrino with Piotr Jagielski providing the
   appropriate patch.</p>

   <h3>4th of June, 2012 - Release of SLF4J 1.6.5</h3>

   <p>In the slf4j-log4j12 module, upgraded the log4j dependency to
   version 1.2.17.</p>

   <p>Added removeHandlersForRootLogger() method to <code><a
   href="apidocs/org/slf4j/bridge/SLF4JBridgeHandler.html">SLF4JBridgeHandler</a></code>
   class.</p>

   <p>The log4j-over-slf4j module now exports all its packages in its
   manifest. This issue was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=262">262</a> by
   Mikhail Mazursky who also provided the relevant patch.
   </p>

   <h3>October 31st, 2011 - Release of SLF4J 1.6.4</h3>

   <p>Fixed in thread-safety issues in <code>BasicMDCAdapter</code>
   fixing <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=203">bug
   #203</a> and <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=224">bug
   #224</a>. Note that <code>BasicMDCAdapter</code> is only used with
   the slf4j-jdk14.jar binding.
   </p>

   <p><code>BasicMDCAdapter</code> invoked a method introduced in JDK
   1.5 preventing it from running under JDK 1.4. Interestingly enough,
   this issue has never been reported by the user community.</p>

   <h3>October 17th, 2011 - Release of SLF4J 1.6.3</h3>

   <p><code>LogEvent</code> class in slf4j-ext module now correctly
   passes the event data as a parameter object. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=246">bug #246</a>
   reported by Ralph Goers.
   </p>

   <p>Added missing OSGi manifest to the jul-to-slf4j module. This
   fixes <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=166">bug
   #166</a> reported by Ekkehard Gentz. </p>

   <p>In the log4j-over-slf4j module, added missing
   <code>getAllAppenders</code>() method in <code>Category</code>
   class. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=235">bug #235</a>
   reported by Anthony Whitford.
   </p>

   <h3>August 19th, 2011 - Release of SLF4J 1.6.2</h3>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=138">bug
   #138</a>. SLF4J will no longer complain about multiple SLF4J
   bindings when running under a Weblogic server.
   </p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=228">bug
   #228</a>. When running under IBM's JDK, and if no binding can be
   found, SLF4J will no longer throw a
   <code>NoClassDefFoundError</code>. Instead, it will default to an
   NOP implementation. Under the same circumstances but with Sun's
   JDK, SLF4J already defaulted to an NOP implementation since release
   1.6.0.</p>

   <p>Added certain missing classes to the log4j-over-slf4j module as
   requested in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=225">bug 225</a> by
   Josh Stewart.
   </p>

   <hr noshade="noshade" size="1"/>

   <h3>July 5th, 2010 - Release of SLF4J 1.6.1</h3>

   <p>Updated log4j dependency to version 1.2.16 and <a
   href="http://cal10n.qos.ch/">CAL10N</a> dependency to version
   0.7.4.
   </p>

   <p>Fixed missing versioning OSGi metadata in the log4j-over-slf4j
   module. This problem was reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=187">bug 187</a> by
   David Savage.
   </p>

   

   <hr noshade="noshade" size="1"/>

   <h3>May 8th, 2010 - Release of SLF4J 1.6.0</h3>

   <p>It is expected that <em>all</em> SLF4J releases in the 1.6.x
   series will be mutually compatible.
   </p>

   <p>As of SLF4J version 1.6.0, in the absence of an SLF4J binding,
   slf4j-api will default to a no-operation implementation discarding
   all log requests. Thus, instead of throwing an exception, SLF4J
   will emit a single warning message about the absence of a binding
   and proceed to discard all log requests without further
   protest. See also the <a href="manual.html#libraries">relevant
   section</a> in the user manual.
   </p>

   <p>In the presence of multiple parameters and if the last argument
   in a logging statement is an exception, then SLF4J will now presume
   that the user wants the last argument to be treated as an exception
   and not a simple parameter. See the relevant <a
   href="faq.html#paramException">FAQ entry</a> for further
   details. This fixes <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=70">bug 70</a>
   submitted by Joern Huxhorn who also provided the relevant patch.
   </p>
  
   <p>The <code>log</code> method in <code>LocationAwareLogger</code>
   interface now admits an additional parameter of type
   <code>Object[]</code> representing additional arguments of the log
   request. Due to this modification, slf4j-api version 1.6.x will not
   work with bindings shipping with SLF4J 1.5.x -- bindings shipping
   with 1.6.x must be used.
   </p>


   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=150">bug 150</a> by
   implementing missing <code>resetConfiguration()</code> and
   <code>shutdown()</code> methods in <code>LogManager</code> (in
   log4j-over-slf4j) as nop. In addition, the
   <code>getCurrentLoggers()</code> method has been implemented by
   returning an empty enumeration.
   </p>


   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=170">bug 170</a> by
   a bare-bones implementation of the <code>NDC</code> class in
   log4j-over-slf4j.</p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=175">bug 175</a> by
   synchronizing access to the loggerNameList field.</p>

   <p>Fixed <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=164">bug 164</a>
   observed when SLF4J artifacts were placed under
   java.endorsed.dirs.</p>

   <p>Fixed sub-optimal list type usage in
   <code>SLF4JLogFactory</code> as reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=179">bug 179</a> by
   Sebastian Davids.
   </p>


   <p>Fixed documentation inconsistency in <code>SLF4JLog</code> as
   reported in <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=180">bug 180</a> by
   Sebastian Davids.
   </p>

   
   <hr noshade="noshade" size="1"/>

   <h3>February 25th, 2010 - Release of SLF4J 1.5.11</h3>


  <p>Users yet unfamiliar with SLF4J sometimes unknowingly place both
  <em>log4j-over-slf4j.jar</em> and <em>slf4j-log4j12.jar</em>
  simultaneously on the class path causing stack overflow
  errors. Simultaneously placing both <em>jcl-over-slf4j.jar</em> and
  <em>slf4j-jcl.jar</em> on the class path, is another occurrence of
  the same general problem. As of this version, SLF4J preempts the
  inevitable stack overflow error by throwing an exception with
  details about the actual cause of the problem. This is deemed to be
  better than leaving the user wondering about the reasons of the
  <code>StackOverflowError</code>.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=168">bug
  168</a>. In case log4j-over-slf4j is used and a logback appender
  requires a third party library which depends on log4j, the
  <code>log(String FQCN, Priority p, Object msg, Throwable t)</code>
  method in log4j-over-slf4j's Category class would throw an
  <code>UnsupportedOperationException</code>. Problem reported by Seth
  Call.</p>
  

  <hr noshade="noshade" size="1"/>

  <h3>December 3rd, 2009 - Release of SLF4J 1.5.10</h3>

  <p>SLF4J version 1.5.10 consist of bug fixes and minor
  enhancements. It is totally backward compatible with SLF4J version
  1.5.8. However, the slf4j-ext module ships with a new package called
  <code>org.slf4j.cal10n</code> which adds <a
  href="localization.html">localized/internationalized logging</a>
  support as a thin layer built upon the <a
  href="http://cal10n.qos.ch">CAL10N API</a>.</p>

  <p><a href="http://www.slf4j.org/android/">SLF4J-android</a>,
  maintained by <a
  href="http://dbis.cs.unibas.ch/team/thorsten-moller/dbis_staff_view">Thorsten
  M&ouml;ller</a>, was added as a daughter project of SLF4J.
  </p>

  <p>Added missing "Export-Package" declaration for cal10n in the OSGi
  manifest file for sfl4j-ext. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=156">bug 156</a> by
  Pete Muir.</p>

  <p>In log4j-over-slf4j, added missing log(...)  methods as requested
  by Zoltan Szel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=139">bug report
  139</a>.</p>

  <p>In log4j-over-slf4j, added missing <code>LogManager</code> class
  as requested by Rick Beton in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=150">bug report
  150</a>.</p>

  <p>In the slf4j-ext module, added
  <code>getCopyOfChildTimeInstruments</code> and
  <code>getCopyOfGlobalStopWatch</code> methods to the
  <code>Profiler</code> class. This enables developers to build their
  own output formatters for a given Profiler. This feature was
  requested by David Lindel&ouml;f in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=141">bug 141</a>.
  </p>

  <p>Fixed a <code>NullPointerException</code> occurring in unspecified
  conditions as described in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=146">bug report
  146</a> by Dapeng Ni.</p>

  <p>Added missing OSGi manifest to the <em>log4j-over-slf4j</em>
  module as requested by Wade Poziombka in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=117">bug 117</a>.
  </p>

  <p>OSGi manifests produced by SLF4J now replace the '-' character by
  '.' in compliance with the OSGi specification. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=152">bug 152</a>
  according to the patch supplied by Hugues Malphettes.
  </p>

  <p>Fixed packaging issue in jcl104-over-slf4j which inadvertently
  produced a jar file as described in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=151">bug 151</a> by
  Jesse McConnell.</p>




  <hr noshade="noshade" size="1"/>

  <h3>June 11th, 2009 - Release of SLF4J 1.5.8</h3>

  <p>SLF4J version 1.5.8 consist of bug fixes. It is totally backward
  compatible with SLF4J version 1.5.7.</p>

  <p>The Maven pom file for the <code>log4j-over-slf4j</code> module
  contained a compile time dependency on the <code>slf4j-jdk14</code>
  module. The dependency should have been declared in the test
  scope. This problem was reported by Jean-Luc Geering on the slf4j
  user list.
  </p>

  <h3>June 10th, 2009 - Release of SLF4J 1.5.7</h3>

  <p>SLF4J version 1.5.7 consist of bug fixes and minor
  enhancements. It is totally backward compatible with SLF4J version
  1.5.6.</p>

  <p>In SLF4J versions 1.5.5 and 1.5.6, the <code>LoggerFactory</code>
  class which is at the core of SLF4J, if a version compatibility
  issue was detected, accidentally invoked a method which was
  introduced in JDK 1.5. Thus, instead of issuing a clear warning
  message, SLF4J would throw a
  <code>NoClassDefFoundError</code>. Consequently, SLF4J would not run
  with JDK 1.4 and earlier but only if a version incompatibility issue
  was present. For example, if you were mixing
  <em>slf4j-api-1.5.6.jar</em> with <em>slf4j-simple-1.4.2.jar</em>,
  which are mutually incompatible. Please note that this bug affects
  only SLF4J versions 1.5.5 and 1.5.6 <em>and</em> only in the
  presence of incompatible versions of slf4j-api and its binding.
  </p>
  
  <p>SLF4J will now emit a warning if more than one binding is present
  on the class path. This enhancement was proposed in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=132">bug 132</a>
  contributed by by Robert Elliot.
  </p>

  <p>The Log interface implementations in the jcl-over-slf4j module
  will now correctly cope with serialization. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=79">bug 79</a>
  reported by Mathias Bogaert. Many thanks to Eric Vargo for precisely
  identifying the problem and supplying the corresponding patch.</p>

  <p>The log4j-over-slf4j module will now correctly
  interact with logging frameworks supporting location information
  such as java.util.logging and logback.  This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=131">bug 131</a>
  reported by Marc Zampetti.
  </p>

  <p><code>SLF4JBridgeHandler</code> will no longer ignore log records
  with an empty message. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=108">bug 108</a>
  reported by Pepijn Van Eeckhoudt and independently by Dan Lewis.
  </p>

  <p>In case the <code>toString()</code> method of a parameter throws
  an exception, <code>MessageFormatter</code> will now print an error
  message, instead of letting the exception bubble higher up as
  previously. This fixes <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=112">bug 112</a>
  submitted by Joern Huxhorn.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 21st, 2008 - Release of SLF4J 1.5.6</h3>

  <p>SLF4J version 1.5.6 consists of bug fixes. Users are encouraged
  to upgrade to SLF4J version 1.5.6. The upgrade should pose no
  problems. Nevertheless, you might still want to refer to the SLF4J
  <a href="compatibility.html">compatibility report</a>.
  </p>

  <p>Fixed long standing <a
  href="http://jira.qos.ch/browse/LBCLASSIC-87">LBCLASSIC-87</a> and
  its younger sibling <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=113">bug
  113</a>. With each call to getLogger() method,
  <code>LoggerContext</code> will now retrieve the ILoggerFactory
  afresh from <code>StaticLoggerBinder</code>. This change enables
  context selectors of native implementations, e.g logback, to work
  correctly.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=114">bug
  114</a> reported by Jason Arndt. Corrected the way
  <code>XLogger</code> (in slf4j-ext) passes its fully qualified class
  name so that the underlying logging system can correctly compute
  location information.
  </p>

  
  <p>The <code>install()</code> method of
  <code>SLF4JBridgeHandler</code> will no longer reset the entire
  j.u.l. environment but solely add a <code>SLF4JBridgeHandler</code>
  instance to jul's root logger. By the same token, the
  <code>uninstall()</code> method will remove previously added
  <code>SLF4JBridgeHandler</code> instances without making any other
  modifications to the j.u.l. configuration.
  </p>
  
  <p>Added <code>MDCStrLookup</code> to slf4j-ext. This class can be
  used with Apache Commons Lang's <code>StrSubstitutor</code> class to
  inject values in the SLF4J MDC into strings. Information on
  StrSubstitutor can be found at <a
  href="http://commons.apache.org/lang/api-release/org/apache/commons/lang/text/StrSubstitutor.html">StrSubstitutor
  javadoc</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>October 17th, 2008 - Release of SLF4J 1.5.5</h3>

  <p>The version check mechanism introduced in SLF4J 1.5.4 was
  inconsistent with the large size of SLF4J's installed user base.  We
  cannot expect external SLF4J implementations to align their release
  schedule with that of SLF4J. Consequently, this SLF4J version,
  namely 1.5.5, retains versions checks but as an elective
  process. For further details see the <a
  href="faq.html#version_checks">relevant entry</a> in the FAQ.
  </p>

  <p>You are highly encouraged to upgrade to SLF4J version 1.5.5. The
  upgrade should pose no problems. Nevertheless, you might still want
  to refer to the SLF4J <a href="compatibility.html">compatibility
  report</a>.
  </p>

  <h3>October 16th, 2008 - Release of SLF4J 1.5.4</h3>

  <p>This version corrects critical bugs.
  </p>

  <p>Fixed <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=106">critical bug
  106</a>. In previous versions of SLF4J, if during the initial
  binding phase, the underlying logging system's default configuration
  created or invoked loggers, a <code>NullPointerException</code>
  would be thrown. Refer to the <a
  href="codes.html#substituteLogger">in error codes</a> document for a
  fuller explanation.</p>
  
  <p>At initialization time, LoggerFactory will now check that the
  version of the slf4j-binding matches that of slf4j-api. If there is
  a mismatch a warning will be issued on the console. This should help
  users identify SLF4J related problems more quickly.</p>

  <p>Improvements in documentation as well as fix for <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=102">packaging
  problems</a> related to <em>slf4j-ext</em> module.
  </p>

  <p>SLF4JBridgeHandler (part of jul-to-slf4j) now accounts for
  loggers with resourceBundle as well parameters. This feature
  requested by Darryl Smith in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=98">bug 98</a> and
  by Jarek Gawor in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=103">bug
  103</a>.</p>
  
  <p>We now say that markers contain <em>references</em> to other
  markers. We no longer talk about child markers. The javadocs of the
  <code>Marker</code> interface have been updated to reflect this
  change. Moreover, the <code>hasChildren()</code> method in the
  Marker interface has been deprecated and a new method called
  <code>hasReferences()</code> was added.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>September 12th, 2008 - Release of SLF4J 1.5.3</h3>

  <p>See also the <a href="compatibility.html#1_5_3">compatibility
  report for this version</a>.
  </p>

  <p>Added a new module called slf4j-ext for slf4j-extensions. See <a
  href="extensions.html">its documentation</a> for further
  details.</p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=71">bug
  71</a> which was re-opened by Manfred Geiler. SLF4J loggers now
  survive serialization. By survive serialization, we mean
  that the deserialized logger instance are fully functional. </p>

  <p>The fix for <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=68">bug 68</a> as
  implemented in version 1.5.1 was incomplete. Michael Furman supplied
  a more complete fix which was incorporated in this release.</p>
  
  <p>When slf4j bridges, e.g. jcl-over-slf4j or log4j-over-slf4j, were
  used in conjunction with JUL as the underlying logging system,
  JDK14LoggerAdapter created a LogRecord even for disabled log
  statements. This performance issue was reported in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=90">bug 90</a> by
  Matthew Mastracci.
  </p>

  <p>Added support for array values, including multi-dimensional
  arrays, as parameters. For example,</p>
  <p class="source">log.debug("{} {}", "A", new int[] {1, 2}});</p>
  <p>will print as "A [1, 2]" instead of "A [I@6ca1c" as
  previously. This enhancement was proposed by "lizongbo".
  </p>

  <p>Parameter substitution code has been simplified. SLF4J now only
  cares about the "{}" formatting anchor, that is the '{' character
  immediately followed by '}'. Previously, the '{' had meaning on its
  own. As a result of this change, users no longer need to escape the
  '{' unless it is immediately followed by '}'. Existing messages
  which escaped standalone '{' character will be printed with a
  preceding backslash. However, no data loss in the printed messages
  will occur.
  </p>

  <p>Added missing <code>getInstance</code> methods to the
  <code>Category</code> class in the log4j-over-slf4j module, fixing
  <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=95">bug 95</a>
  reported by Michael Rumpf.</p>

  <hr noshade="noshade" size="1"/>

  <h3>June 8th, 2008 - Release of SLF4J 1.5.2</h3>

  <p>Improvements to SLF4J documentation as well as fix of <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=88">packaging
  problems</a> related to <em>jul-to-slf4j.jar</em> and
  <em>jcl104-over-slf4j.jar</em>.
  </p>
  
  <h3>June 5th, 2008 - Release of SLF4J 1.5.1</h3>

  <p>See also the <a href="compatibility.html#1_5_1">compatibility
  report for this version</a>.</p>

  <p>In order to support JCL version 1.1.1, the
  <em>jcl<b>104</b>-over-slf4j</em> module was renamed as
  <em>jcl-over-slf4j</em>. SLF4J will no longer ship with
  <em>jcl104-over-slf4j.jar</em> but with <em>jcl-over-slf4j.jar</em>.
  The related work responds to enhancement request discussed in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=85">bug 85</a> as
  reported by Niklas Gustavsson.
  </p>
  
  <p>The <em>slf4j-jcl</em> binding now depends on commons-logging
  version 1.1.1 instead of the older 1.0.4</p>


  <p>Added a java.util.logging to SLF4J bridge as requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=38">bug 38</a> by
  Christian Stein, David Smiley, Johan Ferner, Joern Huxhorn and
  others.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=68">bug
  68</a> reported by Su Chuan and David Rauschenbach. SLF4J requires
  log4j 1.2.12 or later. However, if an older version of log4j is
  present (lacking the TRACE level), in order to avoid
  NoSuchMethodError exceptions, the SLF4J's
  <code>Log4jLoggerAdapter</code> will map the TRACE level as DEBUG.
  </p>

  
  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=78">bug
  78</a> reported by Venu Thachappilly. If the argument array passed
  to a Logger printing method (debug, info, etc.) was null, a
  <code>NullPointerException</code> was thrown. With the correction,
  the messagePattern is returned as is, without parameter
  substitution.
  </p>


  <p>Added the <code>getCopyOfContextMap</code> and
  <code>setContextMap</code> methods to the <code>MDCAdapter</code>
  and <code>org.sf4j.MDC</code> classes. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=84">bug 84</a> by
  Anton Tagunov.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=74">bug
  74</a>, an endless recursion problem in Marker.contains method,
  reported by Michael Newcomb. Also added he
  <code>getDetachedMarker</code> method to <code>IMarkerFactor</code>
  and <code>MarkerFactory</code> classes which was indirectly
  requested in bug 74.
  </p>

  <p>Added the methods <code>getLevel()</code> and
  <code>getEffectiveLevel()</code> to the <code>Category</code> class
  in log4j-over-slf4j. This addition was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=74">bug 74</a> by
  Michael Newcomb.
  </p>

  <p>The <a href="migrator.html">SLF4J Migrator</a>
  tool has been improved to support migration from JUL to SLF4J.
  </p>

  <p>In <code>MarkerIgnoringBase</code> class, corrected mapping of
  trace methods with markers to their equivalents without marker
  data. Previously, the mapping was trace to debug. The incorrect
  mapping affected only calls to the trace method with
  markers. Interestingly enough, this bug was picked up by new unit
  tests and has not been reported as a bug by our users.
  </p>
  

  <h3>February 26th, 2008 - Release of SLF4J 1.5.0</h3>


  <p>A tool called <a href="migrator.html">SLF4J Migrator</a> now
  ships with SLF4J. It can help you migrate your project using JCL or
  log4j to use SLF4J instead.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=61">bug
  61</a> reported by Christopher Sahnwaldt. It is now possible to
  place a backslash in front of a formatting anchor, by escaping the
  backslash. For example, the call to
  <code>MessageFormatter.format("C:\\\\{}", "foo")</code> will now
  correctly return "C:\\foo". The backslash character needs to be
  escaped in Java, which leads to four backslashes.
  </p>

 
  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=63">bug
  63</a> reported by Maarten Bosteels. SLF4J now supports MDC for
  <code>java.util.logging</code> package.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=64">bug
  64</a> reported by Michal Bernhard. The log4j binding will now alert
  the user if she uses SLF4J with a version of log4j earlier than 1.2.12.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=65">bug
  65</a> reported by Ben Gidley. Superfluous
  &lt;version>$&#x7B;parent.version}&lt;/version> lines have been
  removed from pom.xml files. These lines reportedly confuse certain
  Maven repositories.
  </p>

  <p>In the <code>org.apache.log4j.Category</code> class, as
  implemented in the log4j-over-slf4j module, calls to the printing
  trace() are now correctly mapped to SLF4J's trace() printing method
  (instead of debug()). Superfluous printing methods with the
  signature <code>xxxx(Object, Object)</code> and <code>xxxx(String,
  Object, Object)</code> have been removed.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=67">bug
  67</a> reported by Chris Custine.  The manifest file for
  jcl104-over-slf4j now correctly declares version 1.0.4 for the
  exported JCL packages.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=69">bug
  69</a> reported by Joern Huxhorn, who graciously supplied the fix as
  well as a test case. The <code>add</code> method in
  <code>BasicMarker</code> class now correctly prevents multiple
  addition of the same child. Moreover, the <code>remove</code> method
  now correctly removes the specified child marker.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=41">bug
  41</a> reported by Sebastian Davids. The manifest files of various
  projects now mention J2SE-1.3 as the required execution
  environment.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=71">bug
  71</a> reported by Manfred Geiler. The SLF4JLog and
  SLF4JLocationAwareLog classes are now serializable solving
  serialization problems encountered with certain libraries which
  attempt to serialize JCL log instances.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=73">bug
  73</a> reported by Oleg Smirsky. A "Fragment-Host: slf4j.api" line
  has been added to every MANIFEST.MF file exporting
  <code>org.slf4j.impl</code>.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=72">bug
  72</a> reported by Ian Carr. Performance issues with slf4j-jdk14 for
  disabled log statements have now been corrected.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>August 20th, 2007 - Release of SLF4J 1.4.3</h3>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=60">bug
  60</a> as reported by Costin Leau. OSGI manifest entries now declare
  the correct SLF4J version.
  </p>
  
  <p>Clarified the behavior of the various methods methods in the MDC
  class with respect to "null" parameters. This was requested in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=58">bug 58</a> by
  Sebastian Davids.
  </p>

  <p>Removed the slf4j-archetype module because nobody seems to have a
  use for it.</p>

  <h3>July 12th, 2007 - Release of SLF4J 1.4.2</h3>

  <p>The <a href="log4j-over-slf4j.html">log4j-over-slf4j</a> module
  has been moved back into SLF4J. Originally, this module was part of
  SLF4J and was moved into logback due to the lack of MDC support in
  SLF4J. With version 1.4.2 and the addition of MDC support in SLF4J
  1.4.1, log4j-over-slf4j returns to its original home. Note that the
  previous name of the module was <a
  href="http://logback.qos.ch/bridge.html">log4j-bridge</a>.
  </p>

  <p>Addition of the <code>getMDCAdapter</code> method to
  org.slf4j.MDC class. This allows access to the actual MDC
  implementation which can on occasion come in very handy.
  </p>

  <hr noshade="noshade" size="1"/>



  <h3>July 4th, 2007 - Release of SLF4J 1.4.1</h3>


  <p>SLF4J now supports <a href="manual.html#mdc">Mapped Diagnostic
  Contexts</a> (MDC) as requested by Andy Gerweck and Steve Ebersole
  in <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=49">bug
  49</a>.
  </p>

  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=53">bug
  53</a> as reported by Heinrich Nirschl.  The public method
  <code>trace(String)</code> in the <code>Log4jLoggerAdapter</code>
  class incorrectly called the underlying log4j logger with level DEBUG
  instead of TRACE.
  </p>

  <p>Fixed various documentation related errors kindly reported by
  Mark Vedder.
  </p>


  <hr noshade="noshade" size="1"/>


  <h3>May 16th, 2007 - Release of SLF4J 1.4.0</h3>


  <p>In response to many user requests over time, the TRACE level has
  been added to <a
  href="api/org/slf4j/Logger.html">org.slf4j.Logger</a>
  interface. Please also see the <a href="faq.html#trace">FAQ entry
  discussing</a> the TRACE level.
  </p>


  <p>Fixed <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=47">bug
  47</a> as reported by Terry Todd.  In previous a SLF4J release the
  <code>org.apache.commons.logging.impl.SLF4FLogFactory</code> class
  was renamed as <code>SLF4JLogFactory</code>. The
  <em>META-INF/services/org.apache.commons.logging.LogFactory</em>
  resource file had not reflected this change. It does now.
  </p>


  <p>Eric Yung <a
  href="http://www.slf4j.org/pipermail/user/2007-April/000327.html">reported</a>
  that Apache commons-configuration access certain commons-logging
  classes, namely <code>org.apache.commons.logging.impl.NoOpLog</code>
  and SimpleLog, directly. Following Eric's suggestion,
  jcl104-over-slf4j now includes the aforementioned classes.
  </p>
  

  <hr noshade="noshade" size="1"/>

  <h3>April 15th, 2007 - Release of SLF4J 1.3.1</h3>


  <p>In response to a <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=39">enhancement
  request</a> made by Michael Newcomb, a marker can now be detached
  from the internal list of the <code>MarkerFactory</code> that
  generated it.
  </p>

  <p>Fixed a silly but nonetheless annoying bug where log request of
  level ERROR made through jcl104-over-slf4j would log twice. This bug
  was <a
  href="http://www.slf4j.org/pipermail/user/2007-April/000323.html">reported</a>
  and precisely described by Andrew Cooke.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>February 25th, 2007 - Release of SLF4J 1.3.0</h3>

  <p>This release consists of rearrangement of classes among
  projects. More specifically, the
  <code>org.slf4j.LoggerFactory</code> class is now packaged within
  the <em>slf4j-api.jar</em> file instead of the various slf4j
  bindings. <b>It follows that client code needs to depend on only
  slf4j-api in order to compile, while the various slf4j bindings are
  only needed as runtime dependencies.</b> See also the <a
  href="faq.html#maven2">Maven2-related FAQ entry</a>. Given the
  practical significance of this change, we highly recommend that
  library-authors upgrade to version 1.3 at their earliest
  convenience. 
  </p>
  
  <p><a href="http://bugzilla.slf4j.org/show_bug.cgi?id=23">Bug number
  23</a> has been fixed, at the cost of minor and backward compatible
  changes. In other words, jcl104-over-slf4j now preserves caller
  location information.
  </p>
  
  <p>It is now possible to obtain the root logger of the underlying
  logging implementation by requesting a logger named
  &quot;ROOT&quot;. This feature was requested by Sebastien Davids
  in <a href="http://bugzilla.slf4j.org/show_bug.cgi?id=35">bug
  report 35</a>. </p>

  <p>For  an   exact  list   of  changes  please   refer  to   the  <a
  href="changes/changes-1.3.txt">1.3.0  compatibility  report</a> file
  as generated by clirr.</p>

  
  <hr noshade="noshade" size="1"/>

  <h3>January 24th, 2007 - Release of SLF4J 1.2</h3>
  <p>This release includes several modifications to make SLF4J
  an <a href="http://www.osgi.org/">OSGi</a>-friendly framework. 
  The modules' MANIFEST.MF files now include
  OSGi metadata. Regarding these improvements, and OSGi in general, the
  SLF4J project is happy to welcome John E. Conlon  as a new committer.
  </p> 
  
  <p>Marker objects are now Serializable.
  </p>
  
  <hr noshade="noshade" size="1"/>

  <h3>December 21st, 2006 - Release of SLF4J 1.1.0 (final)</h3>

  <p>This release consists of minor bug fixes and documentation
  changes. More importantly, the log4j-over-slf4j module has been
  moved to the logback project, under the name <a
  href="http://logback.qos.ch/bridge.html">log4j-bridge</a>.
  </p> 

   <p>Added the file "org.apache.commons.logging.LogFactory" under
   META-INF/services directory which went missing in the 1.1.0 series
   of SLF4J. This fixes a compatibility problem with Apache Axis which
   uses its own discovery mechanism, namely, commons-discovery version
   0.2. The problem was reported in bug <a
   href="http://bugzilla.slf4j.org/show_bug.cgi?id=33">report 33</a>
   by David Varnes.
  </p>

  <p>The file jcl104-over-slf4j.jar had various entries missing in its
  MANIFEST.MF file, as reported by Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=30">bug number
  30</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 16th, 2006 - Release of SLF4J 1.1.0-RC1</h3>

  <p>This release consists of packaging related bug fix in addition to
  minor documentation changes.  
  </p> 
  
  <p>Contrary to RC0, RC1 no longer uses SNAPSHOT versions for the
  slf4j-parent pom. The solution to <a
  href="http://ceki.blogspot.com/2006/11/solution-to-maven2-version-number.html">Maven
  version problem</a> does not work for public projects such as SLF4J
  because SNAPSHOTs are not allowed on ibiblio.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>November 4th, 2006 - Release of SLF4J 1.1.0-RC0</h3>

  <p>This release consists of bug fixes. Moreover, since the major
  packaging related changes in 1.1.0-beta0 seem to work well, this
  release is marked as RC0.</p>

  <p>Fixed the JDK 1.5 dependency for the SLF4J build, as reported by
  Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=28">bug number
  28</a>. SLF4J now explicitly declares a dependency on JDK 1.4 in its
  pom.xml file.
  </p>

  <p>Fixed an incorrect reference to the logback project in slf4j-api
  pom file. This bug was reported by Boris Unkel in <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=29">bug number
  29</a>.
  </p>

  <p>Fixed a synchronization problem in factories of almost all SLF4J
  bindings. This bug was reported independently by Howard M. Lewis Ship
  and Boris Unkel in bug reports <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=26">26</a> and
  respectively <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=26">27</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>September 7th, 2006 - Release of SLF4J 1.1.0-beta0</h3>

  <p>Release 1.1.0-beta0 is a relatively important release with a
  refactoring of the way class files are organized in jar files. In
  previous releases, each binding was self-contained in a single jar
  file. In this release, each and every binding depends on
  <em>slf4j-api.jar</em> which contains the bulk of the classes
  required to use SLF4J, except for one or two adapter classes.  Only
  the adapter classes are now shipped with each specific binding jar
  as appropriate for the underlying logging system..
  </p>

  <p>This release is built using Maven instead of Ant. As for the java
  code, it has not been changed.</p>
    
  <hr noshade="noshade" size="1"/>

  <h3>June 8th, 2006 - Release of SLF4J 1.0.2</h3>

  <p>Release 1.0.2 is a maintenance release containing bug fixes
  only.</p>

  <ul>

    <li>Fixed <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=22">bug number
    22</a> reported by Bjorn Danielsson. This version of the SLF4J API
    will no longer systematically throw an exception when the
    <code>o.a.c.l.impl.SLF4FLogFactory#release()</code> method is
    invoked. Instead, the <code>release()</code> method will issue a
    <a href="http://www.slf4j.org/codes.html">warning</a>.

    </li>

  </ul>

  <hr noshade="noshade" size="1"/>

  <h3>May 1st, 2006 - Release of SLF4J 1.0.1</h3>

  <p>Release 1.0.1 is a maintenance release containing bug fixes
  only.</p>

  <ul>

    <li>Fixed <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=20">bug number
    20</a> reported by Steve Bate. <code>JDK14LoggerAdapter</code>
    will now correctly relay the logger name to the underlying JDK 14
    logging system.
    </li>

    <li>Added the file "org.apache.commons.logging.LogFactory" under
    META-INF/services directory in the jcl104-over-slf4j jar
    file. This fixes a compatibility problem with Apache Axis which
    uses its own discovery mechanism, namely, commons-discovery
    version 0.2. The bug was reported by Dave Wallace.
    </li>

  </ul>

  
  <hr noshade="noshade" size="1"/>

  <h3>March 8th, 2006 - Release of SLF4J 1.0</h3>

  <p>This is release labeled as 1.0 (final) contains few relatively
  minor changes:
  </p>

  <ul>
    <li>As <a
    href="http://marc.theaimsgroup.com/?t=114063163800004">discussed</a>
    on the slf4j user list, <code>SimpleLogger</code> now directs its
    output to stderr instead of stdout.
    </li>
    
    <li>Modified <code>JDK14LoggerAdapter</code> so that caller
    information is now correctly printed, as reported in <a
    href="http://bugzilla.slf4j.org/show_bug.cgi?id=13">bug 13</a> by
    Peter Royal.
    </li>

    <li>Minor additions to the Marker interface.</li>

  </ul>
  
  <hr noshade="noshade" size="1"/>

  <h3>February 4th, 2006 - Release of SLF4J 1.0-RC6 and NLOG4J
  1.2.22</h3>

  <p>The <code>MarkingLogger</code> interface has been removed and its
  contents merged into <code>org.slf4j.Logger</code>. This change
  should not adversely affect end-users. However, SLF4J bindings need
  to be updated. This has been done for all the bindings shipped with
  SLF4J distribution as well as NLOG4J. As for x4juli, the update is
  planned for its next release.
  </p>

  <p>The merge between the <code>MarkingLogger</code> and
  <code>Logger</code> interfaces has been motivated by the need to
  allow end-users to easily switch between logging systems that
  support markers and those that do not.
  </p>

  <p>Added a default instance to SimpleLoggerFactory to serve as a
  last resort fallback mechanism. This instance is designed to be used
  by a very specific group of users, namely for those developing
  logging systems (e.g. log4j or LOGBack). It is not intended for
  end-users of the SLF4J API.
  </p>

 <hr noshade="noshade" size="1"/>

  <h3>January 9th, 2006 - Release of SLF4J 1.0-RC5 and NLOG4J
  1.2.21</h3>

  <p>A maintenance release correcting bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=11">#11</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=12">#12</a> and in
  general improved resilience to null input parameters across
  implementations. Many thanks to Boris Unckel and Kenneth for
  reporting the null input issue.
  </p>
  
 <hr noshade="noshade" size="1"/>

  <h3>December 27th, 2005 - Release of SLF4J 1.0-RC4 and NLOG4J
  1.2.20</h3>


  <p>The printing methods in <code>org.slf4j.Logger</code> interface
  now support passing 3 or more parameters in an <code>Object</code>
  array. This was a frequently requested feature missing in previous
  versions of SLF4J.
  </p>

  <p>NLOG4J 1.2.20 reflects the addition of new methods in the
  <code>org.slf4j.Logger</code> interface.</p>

  <hr noshade="noshade" size="1"/>

  <h3>December 8th, 2005 - Release of SLF4J 1.0-RC3</h3>

  <p>Maintenance release fixing reported bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=6">#6</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=7">#7</a>.
  </p>


  <h3>November 28th, 2005 - Release of SLF4J 1.0-RC2</h3>

  <p>In response to a request by Greg Wilkins, this release adds the
  jar file <em>slf4j-jcl.jar</em>, an SLF4J binding for JCL. Please
  read the <a href="manual.html#gradual">gradual migration section</a>
  in the manual for more details.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>November 21st, 2005 - Release of SLF4J 1.0-RC1</h3>

  <p>A maintenance release correcting bugs <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=4">#4</a> and <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=5">#5</a>. Many
  thanks to Christian Beil for accurately reporting bug #4.
  </p>
  
  <p>There has been also an effort to minimize the file sizes of the
  various jar files produced by SLF4J, resulting in jar files
  approximately 40% smaller than in version 1.0beta9.
  </p>

  <p>Given that the SLF4J API is now deemed stable, this release is
  marked as RC1, that is release candidate number 1.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>October 19th, 2005 - Release of SLF4J 1.0-beta9</h3>

  <p>The SLF4J distribution now includes two distinct bindings
  <em>slf4j-log4j12.jar</em> and <em>slf4j-log4j13.jar</em> in order
  to differentiate between log4j version 1.2 and version 1.3. This
  distinction is absolutely necessary because log4j 1.2 and 1.3 are
  not run-time compatible, although they are mostly compile-time
  compatible.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>October 19th, 2005 - Release of SLF4J 1.0-beta8 and NLOG4J 1.2.18</h3>


  <p>Added a new SLF4J binding, <em>slf4j-log4j.jar</em>, intended to
  be used in conjunction with vanilla <em>log4j.jar</em>, as
  distributed by the <a href="http://logging.apache.org">Apache
  Logging Services</a> project. The slf4j-log4j binding is quite
  similar in structure to the JDK 1.4 binding that existed
  previously. 
  </p>

  <p>The slf4j-log4j binding addresses compatibility problems which
  arose when copies of both <em>log4j.jar</em> and <em>nlog4j.jar</em>
  lay on the class path, in particular when it was undesirable or
  impossible to remove the preexisting <em>log4j.jar</em> file.
  </p>

  <p>Methods in the <code>org.slf4j.Logger</code> interface related to
  markers were moved to a separate super interface called <a
  href="api/org/slf4j/MarkingLogger.html">
  <code>org.slf4j.MarkingLogger</code></a>. This refactoring reduces
  the weight of the <a href="api/org/slf4j/Logger.html">
  <code>Logger</code></a> interface.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>August 28th, 2005 - Release of SLF4J 1.0-beta7 and NLOG4J 1.2.17</h3>

  <p>Spurred by <a
  href="http://bugzilla.slf4j.org/show_bug.cgi?id=3">bug report
  #3</a>, SLF4J binding code has been refactored and
  simplified. Logging systems implementing SLF4J interfaces have to
  have less work in order to bind with SLF4J. Moreover, these changes
  have no incidence on the published interface of SLF4J.
  </p>

  
  <hr noshade="noshade" size="1"/>

  <h3>August 26th, 2005 - Release of SLF4J 1.0-beta6</h3>

  <p>To ease migration to SLF4J from JCL, this release includes a jar
  file called <em>jcl-over-slf4j-1.0.4.jar</em>. This jar file can be
  used as drop-in replacement for JCL version 1.0.4. It implements the
  public API of JCL using SLF4J underneath.
  </p>

  <p>Thus, you can immediately benefit from the advantages of SLF4J
  without waiting for all the libraries you depend on to migrate to
  SLF4J first.</p>
 
  <hr noshade="noshade" size="1"/>

  <h3>August 16th, 2005 - Release of NLOG4J 1.2.16</h3>

   <p>This release adds solves a compatibility problem between log4j
  and nlog4j.  Previous to this release, code compiled with log4j
  would not run correctly with nlog4j.
  </p>

  <p>With the fixes introduced in NLOG4J 1.2.16, code compiled with
  log4j 1.2.x will run without problems when deployed using NLOG4j.
  </p>

  <p>However, the inverse is not true. Code compiled with nlog4j can
  only be deployed using nlog4j.
  </p>
 
  <hr noshade="noshade" size="1"/>
  
  <h3>August 12th, 2005 - Release of SLF4J 1.0-beta5 and NLOG4J
  1.2.15</h3>

  <p>This release adds support for the <a
  href="api/org/slf4j/Marker.html">Marker</a> interface. Thus, log
  statements can be decorated with Marker data allowing more
  expressive power in the processing of log statements.
  </p>

  <p>For the sake of IoC frameworks, <code>Logger</code> instances can
  new be queried for their <a
  href="api/org/slf4j/Logger.html#getName()">name</a>.
  </p>

  <p>With the addition of markers, sub-domains are no longer
  needed.</p>

  <p>The <code>LoggerFactoryAdapter</code> has been simplified and
  renamed as <a
  href="api/org/slf4j/ILoggerFactory.html"><code>ILoggerFactory</code></a>.
  </p>
  
  <hr noshade="noshade" size="1"/>

  <h3>July 5th, 2005 - Release of NLOG4J 1.2.14</h3>
 
  <p>This release fixes compatibility problems between NLOG4J and
  Jakarta Commons Logging.
  </p>

  <hr noshade="noshade" size="1"/>
  
  <h3>June 28th, 2005 - Release of SLF4J 1.0-beta4 and NLOG4J
  1.2.13</h3>

  <p>Following discussions on the SLF4J developers list, the
  signatures of the printing methods in <a
  href="api/org/slf4j/Logger.html"><code>org.slf4j.Logger</code></a>
  interface have been modified to admit messages of type
  <code>String</code> instead of type <code>Object</code> as
  previously. The current set of printing methods is listed below.
  </p>

  <pre class="source">
 void debug(String msg); 
 void debug(String format, Object arg); 
 void debug(String format, Object arg1, Object arg2); 
 void debug(String msg, Throwable t); 

 void error(String msg); 
 void error(String format, Object arg;) 
 void error(String format, Object arg1, Object arg2); 
 void error(String msg, Throwable t); 
      
 void info(String msg); 
 void info(String format, Object arg); 
 void info(String format, Object arg1, Object arg2); 
 void info(String msg, Throwable t); 
      
 void warn(String msg); 
 void warn(String format, Object arg); 
 void warn(String format, Object arg1, Object arg2); 
 void warn(String msg, Throwable t);  </pre>
 

  <p>NLOG4J release 1.2.13 reflects changes in the SLF4J API.
  </p>

  <p>You can download SLF4J and NLOG4J, including full source code,
  class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - SLF4J version 1.0-beta-3 released</h3>

  <p>In response to user comments, the <code>org.slf4j.ULogger</code>
  interface has been renamed as <code>org.slf4j.Logger</code>.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - NLOG4J version 1.2.12 released</h3>

  <p>SLF4J.ORG is proud to release NLOG4J 1.2.12, a log4j-replacement
  with native SLF4J API support.  Except for users of LF5, chainsaw or
  <code>NTEvenAppender</code>, NLOG4J should be considered as a 100%
  compatible, drop-in replacement for log4j version 1.2.9. 
  </p>

  <p>This release reflects changes in the SLF4J API, i.e renaming of
  <code>org.slf4j.ULogger</code> interface as
  <code>org.slf4j.Logger</code>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 17th, 2005 - SLF4J version 1.0-beta-3 released</h3>

  <p>SLF4J.ORG is proud to release SLF4J 1.0-beta-3. In response to
  user comments, the <code>org.slf4j.ULogger</code> interface has been
  renamed as <code>org.slf4j.Logger</code>.
  </p>

  <p>You can download SLF4J, including full source code, class files
  and documentation on our <a href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 14th, 2005 - NLOG4J version 1.2.11 released</h3>

  <p>SLF4J.ORG is proud to release NLOG4J 1.2.11, a log4j-replacement
  with native SLF4J API support.  Except for users of LF5, chainsaw or
  <code>NTEvenAppender</code>, NLOG4J should be considered as a 100%
  compatible, drop-in replacement for log4j version 1.2.9.
  </p>

  <p>You can download NLOG4J version 1.2.11, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>May 4th, 2005 - SLF4J version 1.0-beta-2 released</h3>

  <p>SLF4J.ORG is proud to release SLF4J 1.0-beta-2. This release
  contains cosmetic or javadoc changes. For example, the project has a
  new logo.
  </p>

  <p>You can download SLF4J version 1.0-beta2, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>


  <hr noshade="noshade" size="1"/>

  <h3>1 May 2005 - not-log4j-1.2.10 released</h3>

  <p>Subsequent to the recall of log4j 1.2.10, SLF4J.ORG releases
  non-log4j-1.2.10 for those interested in SLF4J support in log4j.
  </p>

  <p>You can download not-log4j version 1.2.10, including full source
  code, class files and documentation on our <a
  href="download.html">download page</a>.
  </p>

  <hr noshade="noshade" size="1"/>


  <h3>22 April 2005 - SLF4J project goes live</h3>

  <p>The SLF4J project site, including SVN repositories go
  live. Users can download SLF4J version 1.0-beta1.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>15 April 2005 - start of work on SLF4J source code</h3>

  <p>Start of work on the SLF4j source code.
  </p>

  <hr noshade="noshade" size="1"/>

  <h3>13 April 2005 - start of work on SLF4J project</h3>

  <p>Launch of the SLF4J project. Work has begun on the web-site, svn
  repositories as well as the source code.
  </p>


  <script src="templates/footer.js" type="text/javascript"></script>

</div>
</body>
</html>
