## Logback News

You can receive logback-related announcements by subscribing to the QOS.ch announce mailing list.

### xxx, 2011 - Release of version 0.9.29

Fixed LBCLASSIC-254, a performace issue in `LogbackMDCAdapter` as reported by Michael Franz.

Given that events reference a snapshot of the current MDC map, the snapshot should not be cleared upon invocation of the MDC.clear operation. This issue was reported in LBCLASSIC-253 by Tommy Becker and independently fixed by the changes designated to fix LBCLASSIC-254.

As reported by Deepak Vadgama in LBCORE-199, the entry in every zip file created by `FixedWindowRollingPolicy` had the same name. The issue was solved by adding a timestamp to the name of the entry in the zip files as suggested by a Benoit Xhenseval.

`ConfigurationWatchList` no longer emits an error message when it encouters a configuraton file placed in a jar file, fixing LBCLASSIC-246 as reported by Joern Huxhorn.

Logback now emits a clearer error message in case a conversion pattern misses a closing parenthesis or if an openening parenthesis is misplaced. This fixes LBCORE-193 reported by B. K. Oxley.

Fixed thread safety issue in LRUMessageCache reported in LBCLASSIC-255 by César Álvarez Núñez.

The AccessEvent class in logback-access module now implements the `IAccessEvent` interface. This fixes LBACCESS-12 reported by Joern Huxhorn.

### January 25th, 2011 - Release of version 0.9.28

#### Breaking change: In the Context interface, the previously misspelled property `bithTime` is now renamed as `birthTime`.

In the Context interface, the previously misspelled property `bithTime` ia now renamed as `birthTime`. This is a backward-incompatible change. All pre-existing references to "bithTime" property now need to referenced as "birthTime".

Fixed issue 238 reported by Robert Elliot. `GEventEvaluator`'s start method now correctly sets the state of the instance.

`JaninoEventEvaluator` now expects Java blocks instead of boolean expressions. For even moderately complex logical statements, blocks can be more convenient to read or to write compared with boolean expressions. To ensure backward compatibility, existing boolean expressions are converted into blocks on the fly.

Corrected handling of null valued arguments by DBAppender. This fixes LBCLASSIC-239 reported by Artyom Kalita.

It is now possible to use the context birth time as the time reference for the `<timestamp>` element in configuration files.

Logback can now scan for included files as well. This solves LBCLASSIC-245.

### December 22nd, 2010 - Release of version 0.9.27

Added a new section in the documentation about real-world inspired recipes.

`PatternLayout` now supports compound conversion words of which "%replace" is one example. This change involved a significant re-write of the pattern tokenizer, the pattern parser and the pattern compiler. However, the changes should be backward compatible as far as users are concerned.

The to option of SMTPAppender now admits a pattern and is evaluated dynamically.

`TeeServletInputStream` no longer chokes on input over 8K in size. This fixes LBACCESS-10 as reported by Augusto Rodriguez.

`TeeFilter` now takes include and exclude parameters so that it can be enabled or disabled by host. This solves LBACCESS-15.

Fixed LBCLASSIC-231 as reported by Jeff Skjonsby. When configuring `SizeAndTimeBasedFNATP`, `GaggerConfigurator` (Groovy) will no longer throw a `NullPointerException`.

Every context now returns its own name when asked for the property `CONTEXT_NAME`. This fixes LBCORE-178 as requested by Michael Osipov.

### 20th of October, 2010 - Release of version 0.9.26

Fixed LBCLASSIC-183 as reported by Anthony Whitford. Upon application restart, Tomcat should no longer complain about ThreadLocal variables created internally by logback.

`SMPTAppender` now lets users to set a custom buffer size for the outgoing messages. This fixes LBCORE-170 as requested by Peter Royal.

When stopped, `RollingFileAppender` now calls `stop()` on its policy objects, fixing LBCORE-114 reported by Anders Wallgren.

Added mapping for OFF and ALL levels in `JULHelper` as requested in LBCLASSIC-226 by Christian Brensing.

### October 13th, 2010 - Release of version 0.9.25

Logback-classic now supports propagation of level changes from logback-classic onto the j.u.l. framework. This significantly reduces the performance impact of disabled log statements making it reasonable for real-world applications to use the jul-to-slf4j bridge.

The `<appender-ref>` element now supports variable substitution, thus fixing LBCLASSIC-224 as reported by David Harrigan.

As reported in LBCORE-164, `SizeAndTimeBasedFNATP` would cause previous logging files with indexes over nine to be overwitten on application restart. This complex bug was reported and precisely diagnosed by Dieter Mueller. He has also proposed a fix which was subsequently adopted as is.

### June 30th, 2010 - Release of version 0.9.24

Fixed NullPointerException thrown by `MDCBasedDiscriminator` in case the MDC map is null.

Fixed issue with `SizeAndTimeBasedFNATP` in presence of application stop/restart and non-null file proprety. This issue was reported by Tom Liu in LBCORE-131.

### June 29th, 2010 - Release of version 0.9.23

Fixed Groovy runtime dependency problem with ReconfigureOnChangeFilter, i.e. the auto-scan filter, when using non-groovy configuration files. This problem was reported in LBCLASSIC-214 by Alvin Chee.

Fixed `MDCBasedDiscriminator` so that it supports deferred processing. This issue was reported in LBCLASSIC-213 by Torsten Juergeleit.

### June 21st, 2010 - Release of version 0.9.22

Logback now supports configuration files written in Groovy which are more convenient than configuration files written in XML. We have also developed a tool to automatically migrate your logback.xml files to logback.groovy.

Inspired by the functionality offered by `SiftingAppender`, `SMTPApppender` now can track multiple buffers according to selection information returned by a discriminator.

Fixed synchronization issue in `ConsoleAppender` as reported in LBCORE-158 by David Roussel who also supplied a corrective patch.

### May 8th, 2010 - Release of version 0.9.21

SLF4J dependency upgraded to 1.6.0

Fixed concurrency problem in `SiftingAppender` as reported in LBCLASSIC-203 by Ellen Strnod.

Added GEventEvaluator which processes boolean expression written in the Groovy language.

Fixed rollover problem occuring when the target directory was missing as reported in LBCORE-151 by Torsten Juergeleit. A closely related problem was reported in LBCLASSIC-167 by Rick Janda.

### April 2nd, 2010 - Release of version 0.9.20

Fixed issue related to charsets in `LayoutWrappingEncoder` not being recognized in config files.

Logback now supports conditional processing of configuration files.

A new extension point for defining properties on the fly has been added. The code for this enhancement was provided by Aleksey Didik in LBCLASSIC-182.

Logback now provides an answer to the longstanding logging separation problem for static logger references in shared libraries. This fixes LBCLASSIC-166 and LBCLASSIC-87.

Removed the previously deprecated `getFirstFilter` method in `FilterAttachable` interface.

### March 24, 2010 - Release of version 0.9.19

#### Breaking change: FileAppender now expects an Encoder

In response to LBCORE-128, `WriterAppender` has been renamed as `OutputStreamAppender`, `FileAppender` now sub-classing the latter. `OutputStreamAppender` and sub-classes now take an `Encoder` instead of a `Layout`.

Contrary to layouts which simply transform a logging event into a String, an encoder is responsible for writing the actual event or more accurately the representation of the event onto the output stream. The role of the enclosing appender is now limited to managing the output stream (opening/closing) but not writing actual contents onto the stream. This change will require modifications to existing configuration files. We hope to make up for this inconvenience with cool new features which are only possible using encoders. During a transition period, layouts passed as parameter will be automatically wrapped by an encoder so that configuration files in the old format (using a layout instead of encoder) will continue to work unmodifed.

#### Breaking change: DBAppender in logback-classic expects four additional columns

Instead of lumping log request arguments into a field, `DBAppender` (in logback-classic) now outputs up to four arguments in the logging request in separate columns, named `arg0`, `arg1`, `arg2` and `arg4`. This solves LBCLASSIC-187 reported by Greg Thomas.

Existing databases can be migrated to the new table structure by altering the existing tables. Here is how it would be done in PostgreSQL and MySQL.

    ALTER TABLE logging_event ADD COLUMN arg0 VARCHAR(254);
    ALTER TABLE logging_event ADD COLUMN arg1 VARCHAR(254);
    ALTER TABLE logging_event ADD COLUMN arg2 VARCHAR(254);
    ALTER TABLE logging_event ADD COLUMN arg3 VARCHAR(254);

In Oracle:

    ALTER TABLE logging_event ADD arg0 VARCHAR(254);
    ALTER TABLE logging_event ADD arg1 VARCHAR(254);
    ALTER TABLE logging_event ADD arg2 VARCHAR(254);
    ALTER TABLE logging_event ADD arg3 VARCHAR(254);

`FileAppender` and derived classes can now gracefully deal with IO failures and recover quickly after the original cause of the IO failure is corrected. For example, if the log file is located on a network-attached storage (NAS), and the connection to the NAS server is lost, `FileAppender` and derived classes will recover quickly after the connection to the server is re-established.

The packages under `ch.qos.logback.classic` namespace no longer depend on `org.slf4j.impl`. This fixes LBCLASSIC-184 reported by Gunnar Wagenknecht.

Fixed LBCLASSIC-193. `SyslogAppender` will no longer shutdown when messages over 256Kb cause an `IOException`.

Added OnMarkerEvaluator which evaluates to true in the presence of user-specified markers. When used with `SMTPAppender`, it can trigger an outgoing email message when an event matches user-specified marker.

Request header names in AccessEvent (logback-access) are now stored in a case insensitive way as specified in RFC 2616. This prevents compatibility issues, in particular with recent versions of Tomcat whcih store request header names in lower-case.

Fixed LBCORE-134 reported by Michael Franz. While reading configuration files (in XML), the event handler will correctly process body text, in particular spaces, even when delivered in multiple chunks. The previous behavior of trimming leading and trailing white space has been preserved. Moreover, body text consisting of white space surrounding child elements is ignored.

`SiftingAppender` now exposes its `AppenderTracker`. Moreover, the `stopAndRemoveNow(String key)` method was added to `AppenderTracker`, allowing immediate removal of a nested appender.

Fixed LBCORE-130. `FileNamePattern` no longer treats parenthesis as special.

The CharsetEncoder property in `SMTPAppender` can now be accessed and set from configuration files. This fixes LBCLASSIC-194.

Instead of sending its output to the System.out/err reference that was effective at initialization, `ConsoleAppender` will now seek the most current System.out/err reference and send its output there. This fixes LBCORE-143 as reported by Tom SH Liu.

DBAppender now outputs exception class and message. It will also output root causes, fixing LBCLASSIC-170 reported by Tomasz Nurkiewicz.

You can now override table and column names in DBAppender. This feature was requested in LBCLASSIC-188 reported by Tomasz Nurkiewicz.

Fixed missing EVENT_ID column problem on PostgreSQL as reported in LBCORE-126 by Brian Edwards.

Event id values in DBAppender are now 64bit instead of 32. This change was requested in LBCLASSIC-198 by Michael Lynch.

Added Sybase SQLAnywhere support in DBAppender. This feature was requested by Michael Lynch in LBCLASSIC-197.

Added H2 support in DBAppender.

Fixed LBSITE-36 reported by John Jimenez.

### 3rd of December 2009 - Release of version 0.9.18

After a very long investigation resulting in somewhat a better understanding of licensing issues, logback is now dual-licensed under the EPL 1.0 and LGPL 2.1.

Due to a clerical error LBCORE-26 has re-raised its ugly head. It has now been tamed for good.

Fixed Private-Package and Export-Package sections in logback-classic.jar MANIFEST as reported in LBCLASSIC-165 and LBCLASSIC-121 by applying the relavant patches supplied by Hugues Malphettes.

Made the OSGi import declerations for Janino and javax optional as proposed by David Varnes in LBCORE-101.

`ReconfigureOnChangeFilter` did not pick up changes for configuration files containing spaces. This issue was reported in LBCORE-119 by Anders Wallgren.

Added tests cases which run logback artifacts as bundles within Felix. This should solve a series of problems related to OSGi.

When ill-formed configuration files fragments were included in another configuration file, the included file was not closed correctly. This issue was reported in LBCORE-122 by Michael Franz.

JaninoEventEvaluator now passes the throwable associated with an event as a `java.lang.Throwable` instead of an `IThrowableProxy`. This fixes LBCLASSIC-155 as reported by Hontvári József. See EvaluatorFilter documentation for more details.

The name of the log file nested within .zip archives was incorrectly set to be that of the tmp file logback creates during compression. Anders Wallgren reported and posted an appropriate patch for this problem in LBCORE-98. The nested file is now named after the zip archive file. Analysis showed that this was an appropriate strategy in all the cases we considered.

Fixed LBCLASSIC-149. The ContextNameConverter now correctly uses the context name of the event instead of its own context name.

When a logger is named after an inner class, the '$' is used as a separator, instead of the usual '.'. This fixes the level inheritence issue described in LBCLASSIC-102 and as reported by Joern Huxhorn.

Fixed deadlock issue observed with appender which invoke loggers as reported in LBCLASSIC-154 by Andrew Perrine and debugged by Ralph Goers who also proposed the relevant patch.

### 9th of August 2009 - Release of version 0.9.17

`PackagingDataCalculator` now correctly deals with `NoClassDefFoundError` thrown by class loaders. This fixes LBCLASSIC-125 reported by Roland Klein and independently by Didier Besset.

In configuration files, all tags names associated with explicit actions are now case-insensitive. This should diminish case-related errors users may make when writing configuration files. Tag names associated with implicit actions which are closely linked to the actual Java class being configured, still need to follow the camelCase convention. If you are unsure which case to use for a given tag name, just follow the camelCase convention for tag names which should be correct in most cases.

It is now possible to create uniquely named files by timestamp. Such files are appropriate for log files associated with batch applications. This enhancement fulfills LBCORE-91 as requested by Rick Beton and Szel Zoltan.

Append mode is now mandatory in `RollingFileAppender`. This was already the default and truncation mode is unreasonable in most cases. For example, in truncate mode when an application stops and is quickly re-started, any pre-existing log file for the current period will be lost.

The `activeFile` field in `RollingFileAppender` is now properly updated, fixing LBCORE-90 as reported by Valery Shorin.

The `TimeBasedTriggeringPolicy` has been heavily refactored. It is now possible to trigger rolling simultaenously by time and by size, fixing LBCORE-61.

Fixed LBCLASSIC-145 reported by Joern Huxhorn. The `LoggingEventVO` class now correctly populates its callerData field if the original `ILoggingEvent` already has it.

### 15th of July 2009 - Release of version 0.9.16

In addition to nifty new features, this release contains several important internal changes. Given the importance of some of those internal changes, this release may be less stable than previous logback releases.

In logback-classic, `LoggingEvent` now implements the `ILoggingEvent` interface. All logback-classic components expect to process `ILoggingEvent` instances. Moreover, events which sent to a remote host are now of type `LoggingEventVO`.

Logback-classic will now automatically re-configure itself when its configuration file is modified. This enhancement was requested in LBCORE-59 by Michael Osipov.

FileAppender and its derived class RolllingFileAppender are now based on a finer-grain synchronization model. This change is aimed at reducing various synchronization related bugs, namely LBCLASSIC-135 and its various sub-tasks.

Fixed a bug in the localLevelReset() method in the `Logger` class which inadvertently used the DEBUG_INT value in the org.slf4j.spi.LocationAwareLogger interface instead of the DEBUG_INT value in ch.qos.logback.classic.Level class. The issue was first identified by Andy Ruch in a message to the logback-user list

If the logger name had 12 or more segments, a the logger conversion specified would throw an `ArrayIndexOfBounds` exception. Lukas Zapletal has kindly reported this problem in LBCLASSIC-110 and provided a test case.

A new discriminator class called "ContextBasedDiscriminator" allows SiftingAppender to separate logging based on the context name. This fits nicely with the requirements expressed in LBCLASSIC-117 by Rick Janda.

When a context is reset, then its object and property maps are now cleared. This fixes LBCORE-104 reported by Johan Bos.

Fixed LBCORE-105. Configuration files placed in jar files will no longer lock the jar file. This issue was initially reported for log4j in bug 47465 Mark Thomas.

Fixed LBCORE-94. While configuring a RollingFileAppender, if the File property is declared after any rolling or triggering policies, then logback will now generate an error status message.

Fixed LBCLASSIC-134 reported by Darryl Smith. `DuplicateMessageFilter` will now behave correctly when invoked via `Logger.isXXXEnabled` methods.

Fixed LBCORE-107, incorrectly set context information for the `NestedBasicPropertyIA` instance in Joran, reported by Lóránt Pintér.

Fixed LBCLASSIC-109, reported by Andrew Ruch when a logger context was reset, the trace level was erroneously enabled.

### 12th of February 2009 - Release of version 0.9.15

When the reset() method in `LoggerContext` is called, registered turbo filters are first stopped before being unregistered. This fixes LBCLASSIC-89 reported by Alexis Morillo.

Added a servlet for viewing internal status messages as an HTML table. Two separate implementations are available; one for logback-classic and the other for logback-access.

Added the `clear()` mthod to the `StatusManager` interface. After reconfiguration, it may be desirable to clear the status list maintained by a `StatusManager`. This change was requested by Alexis Morillo in LBCORE-77.

Fixed problem LBCLASSIC-104 related to loss of MDC information in deferred logging events.

Fixed issue LBCLASSIC-101. Logback jar files now include full OSGi bundle information in their manifests. This information is automatically added by Apache Felix' Maven bundle plug-in. The generated manifest files contain an appropriate Bundle-RequiredExecutionEnvironment directive, fixing LBGENERAL-8.

The setter and getter methods for the layout property in `AppenderBase` class now have reasonable default implementations, instead of nop previously. This change was requested by Thilo Tanner in LBCORE-56.

Added log4j.dtd compatible `XMLLayout` as requested in LBCLASSIC-22.

New chapter on Joran.

### 29th of December 2008 - Release of version 0.9.14

Corrected a serious dead-lock problem occuring during configuration. It was reported in LBCLASSIC-81 by Holger Mense.

Corrected thread leakage observed with `TimeBasedRollingPolicy`'s `AsynchronousCompressor`. This bug was reported in LBCORE-78 by Szel Zoltan.

Added DuplicateMessageFilter, a turbo filter which detects duplicate messages, and beyond a certain number of repetitions, drops repeated messages.

Added a new appender called `SiftingAppender`. As its name intimates, a ``SiftingAppender`` can be used to separate (or sift) logging according to a given runtime attribute. For example, `SiftingAppender` can separate logging events according to user sessions, so that the logs generated by each user go into distinct log files, one log file per user.

`BasicStatusManager`'s internal buffer is now split into two parts, the header part and the tail part. The header part stores the fist H status messages whereas the tail part stores the last T messages. At present time H=T=150, although these values may change in future releases.

Fixed `NullPointerException` thrown when calling `setContextMap` on a fresh MDC. Issue was reported by Francois Terrier.

Evaluators are now wired into an appender automatically (implicit rules) without the help of `EvaluatorAction`. EvaluatorAction is now only needed for global evaluator elements. It follows that name attribute is necessary only for global evaluators. Embedded evaluators no longer need a name. This change fixes LBCLASSIC-100. In addition, `EvaluatorAction` has been modified to accept evaluators of any type and not just instances of `JaninoEvaluator`.

Logback-classic default configuration process will now automatically print status data on the console in case of warnings as well as errors. Previously, status data was printed only in case of errors.

`ContextInitializer` will now print the url of the configuration it is using. This should help reduce confusion when multiple config files are found on the class path. This change resolves LBCLASSIC-55 reported by Anton Tagunov and Henric Larsson.

In case multiple configuration files are found on the class path, `ContextInitializer` will now emit a warning. This fixes LBCLASSIC-85 filed by Szel Zoltan.

`HTMLLayout` now honors custom conversion words, thus fixing LBCORE-74 as reported by Natan Cox.

Fixed LBCORE-69 as reported by Andrey Rybin. `SMTPAppenderBase` now has support for charset encodings so that email messages can contain characters beyond US-ASCII.

`SMTPAppender` in logback-classic now defaults to `OnErrorEvaluator` instead of a janino-based evaluator. Thus, by default `SMTPAppender` no longer depends on Janino.

Added UnsynchronizedAppenderBase class based on Ralph Goers' contribution in LBCORE-58. Note that `AppenderBase` remains unchanged. Appenders which need to handle synchronization on their own can do so by deriving from `UnsynchronizedAppenderBase`.

### 5th of December 2008 - Release of version 0.9.13

A `NullPointerException` was being thrown when a the level of a logger was set to null. The logger in question had to have children. This problem was reported in LBCLASSIC-91 by Mateusz Jedruch.

### 4th of December 2008 - Release of version 0.9.12

Fixed bug LBCORE-26 reported by Tsutomu YANO and independently by Hontvári József and Gamaliel Amaudruz. `RollingFileAppender` when used in conjunction with `DateBasedRollingPolicy` will rollover existing log files at initialization if their timestamp warrants it.

Added support for file appending in prudent mode. Thus, multiple `FileAppender` instances running on multiple JVMs can safely write to the same log file. With certain limitations, prudent mode extends to `RollingFileAppender`.

Fixed LBCLASSIC-83. It is now possible to set the level of a logger to null, even if it was previously set to a non-null level. Previously, a `NullPointerException` would be thrown.

In reponse to LBCLASSIC-61, LBCLASSIC-33, LBCLASSIC-24 and LBCLASSIC-14 `JMXConfigurator` has been redesigned.

Fixed LBGENERAL-22. The log4j.properties translator web-application has been significatnly refactored.

Fixed improvement request LBCLASSIC-59 relation to StatusListeners, originally submitted by Anton Tagunov.

The logger and class name converters now consider zero as having special meaning, and will return the simple class name, removing the package name prefix. This feature was asked by Silvano Maffeis.

In response to LBCLASSIC-54 support for turbo filters has refactored. The present code is safe under concurrent access while still offering good performance.

Fixed LBCORE-43 reported by Bruno Navert. Configuration files can now look up property files from classpath resources.

Fixed LBCLASSIC-86 related to `AccessControlException` thrown when run in a JVM with a `SecurityManager`.

Invoking the `LoggerContext.reset()` method resets logger levels to their default value, that is `DEBUG` for the root logger and `null` for all other loggers. This was requested in LBCLASSIC-90 by Mateusz Jedruch.

Fixed bug LBCLASSIC-69 reported by Anton Tagunov. The LevelToSyslogSeverity now correctly handles the TRACE level.

Fixed bug LBCLASSIC-57 reported by Anton Tagunov. SyslogAppender could overwhelm the Syslog server with very large messages. SyslogAppender now limits its message size to 256K.

Logback now supports setting the logger context name as well as inserting variables stored in JNDI as properties.

Fixed issue LBCLASSIC-49 reported by Oliver Lietz. The getLogger() method in `LoggerContext` class will now throw an `IllegalArgumentException` when invoked with a null argument.

### 28th of October 2008 - Release of version 0.9.11

Fixed LBCLASSIC-77 reported independenly by Gianni Doe, Yannick Haudry and Yossi Shaul. The childValue() method of `CopyOnInheritThreadLocal` class part of MDC code no longer throws a `NullPointerException`.

### 27th of October 2008 - Release of version 0.9.10

In case of errors during initialization, logback-classic now automatically prints out its internal status. This has been a frequently requested feature.

The LogbackValve in logback-access (ensuring integration with Tomcat), will now systematically print its internal status upon initialization, unless told to be quiet. This greatly helps troubleshooting the configration of logback-access under Tomcat.

Fixed bug 147 which occured when the user inadvertently attempted to set the layout of a `SyslogAppender`. The code now actively prevents this. Documenation has been updated to reflect the change.

Fixed bug LBCLASSIC-56 originally reported by Michel Colette. Backslash characters are now correctly interpreted in filename patterns.

The TurboFilterChain in a LoggerContext is now cleared when the `reset`() method is called. This problem was reported on May 1st, 2008, by Julia Hu on the logback developpers list.

Fixed issue LBCORE-48. During rollover, compression of large files would bring all logging to a halt. In this latest release, the rolled over file is first renamed, which is a relatively fast operation, and only then is the renamed file compressed asyncronously (in a separate thread).

Fixed issue LBCORE-11. It is now possible to instruct TimeBasedRollingPolicy to delete old files, thus controlling then number of archived log files.

Fixed issue LBCORE-42. If the parent directory of the log file does not exist, then FileAppender will create it, including any necessary but nonexistent parent directories.

Fixed LBCORE-15 reported by Klaus Unger and others. DBAppender should now work with Oracle 9, 10g and 11g, regardless of the JDBC driver type used.

Fixed issue LBCORE-17 reported by Thorbjørn Ravn Andersen. Logback now relies on Geronimo JMS API specifications instead of Sun's JMS API specification, the latter requiring manual installation. With Geronimo JMS, logback can be built using Maven without needing to manually install any dependencies.

Fixed issue LBCORE-23. In PatternLayout, parenthesis can be used to group conversion patterns. It follows that the '(' and ')' carry special meaning and need to be escaped to be used as literals. This is now properly documented.

The location of the default configuration file can be specified by a system property. This feature was requested in LBCORE-32 by Ted Graham, Matt Fowles, Ivan Biddles and Ralph Goers.

Fixed issue LBCORE-55 reported by Natan Cox. `WriterAppender` now outputs its presentation footer and file footer in the the correct order.

Fixed issue LBCORE-27 reported by Peter Royal. `SMTPAppender` now outputs its presentation footer and file footer in the the correct order.

Fixed issue LBCLASSIC-67 reported by Alessandro Fustini. SMTPAppender now correctly configures the layout used to format the subject line of the outgoing email. It no longer appends a lengthy stack trace to the subject line.

Fixed issue LBCLASSIC-68 reported by Gili Tzabari. In environments where the TCCL (Thread Context Class Laoder) was not set, logback was unable to located its default configuraiton files. Logback now uses the class loader that loaded logback itself to locate its resources instead of the TCCL. This approach is simpler and deemed to cover more environments, i.e. more widely applicable.

Fixed issue LBGENERAL-24 reported by Hung Tang. SMTPAppender now supports plain username/password authentication as well as both the STARTTLS command and SSL connections.

Fixed issue LBCLASSIC-48 reported by Peter Royal. SyslogAppender now correctly outputs hours as 0-23 and not as 1-12 as previously.

Added a new TurboFilter called DynamicThresholdFilter which can filter events depending on MDC values based on a variery of criteria such as company name, product or the end user. This filter was contributed by Ralph Goers in LBCLASSIC-53.

### 26th of March 2008 - Release of version 0.9.9

MDC data in now inherited by child threads. This behaviour was already specified in the javadocs. The issue was raised by Martin Benda in bug 64 and independently by Peter Huber.

Logback no longer includes retro-weaver generted jars for JDK 1.4. There seemes to be little interest in JDK 1.4 builds. Calling retro-weaver increases logback's build time by a few seconds each time – seconds in which we can do more productive things.

Fixed bug 104, silly but but nonetheless serious copy-and-paste errors in the c.q.l.classic.Logger class, reported by Joern Huxhorn.

Having been replaced by `SimpleSocketServer`, the `SocketServer` class has been removed.

Fixed bug 105, sockets created by `SocketAppenderBase` is now closed, reported by Joern Huxhorn. More generally, `SimpleSocketServer` is much more careful to track open client connections and to close them.

Fixed bug 110 in relation with the `requestParameterMap` field in `AccessEvent` - reported by Joern Huxhorn.

Fixed SLF4J bug 66 in relation with caller data when using log4j-over-slf4j - reported by Frnack Routier.

Fixed bug 129 reported by Michael Franz. As a result, Joran now supports nested as well as multiple file inclusions.

Fixed bug 100 reported by Joern Huxhorn. At serialization time, object array passed as parameter, when the LoggingEvent is are now serialized as strings.

Fixed bug 109 reported by Joern Huxhorn. There should no longer be any NullPointerExceptions thrown by deserialized `AccessEvent` instances.

Fixed bug 8 reported by Sebastien Pennec. The documentation has been updated to reflect the fact that that in the context of conversion patterns the percent sign carries special meaning, in order to include the percent sign as a literal, it must be escaped with a backslash.

Fixed bug 52 reported by Kenichi Masuko. The bug has been fixed on March 8th, 2007. Starting with this release, Joran will support the injection of any enum tpye, not just `FilterReply`.

### 22th of August 2007 - Release of version 0.9.8

This version of logback synchronizes with SLF4J version 1.4.3. In particular, logback now natively supports SLF4J's MDC API introduced in SLF4J version 1.4.1. If you are using SLF4J version 1.4.1 or later please make sure upgrade to logback version 0.9.8 or later.

Fixed a number of documentation related bugs, in particular bug 90 reported by Luc Maisonobe and bug 88 reported by Sebastian Davids.

It is now possible to include configuration file fragments (in XML) as a resource. Previously, it was only possible to include a file by specifying a path to a file or a URL. This feature was requested by Michael Newcomb in bug 89.

Fixed caller data extraction problem as reported in bug 78 by Hans van der Meer.

The LoggingEvent class' constructor now correctly takes into account the argument array passed by the user. This problem was reported in bug 85 by Robert Christian.

### 29th of May 2007 - Release of version 0.9.7

This release corrects packaging bugs 75 and 76 related to the migration of logback to SLF4J version 1.4.0. There are no other changes.

### 23rd of May 2007 - Release of version 0.9.6

Logback is now aligned and compatible with SLF4J version 1.4.0, thus correcting bug 73 as reported by Andy Gerweck.

Fixed `NoClassDefFoundError` problem when running under JDK 1.4 as reported by Brian Suksomwong.

Fixed bug 63 as reported by La Canea Rosario. Calling log4j (bridge) with the trace level will no longer cause an IllegalStateException to be thrown.

Fixed bug 70 as reported by Dirk Ooms. The %throwable conversion word is now recognized as documented in the logback manual. Moreover, the manual now mentions the %nopex word which can be used to force `PatternLayout` to ignore the exception contained in the logging request.

As in most releases, the documentation has been improved.

### April 2nd, 2007 - Release of version 0.9.5

Fixed methods `isInfoEnabled`, `isWarnEnabled` and `isErrorEnabled` methods in `ch.qos.logback.classic.Logger` class which failed to work correctly. This bug was reported today by Pavel Kral on the slf4j-user list.

Contrary to previous versions of logback, the various Logger.isXYZEnabled(Marker) methods now take into account the marker information passed as parameter.

As discussed in bug 54, during automatic initialization, it makes better sense to first check for logback-test.xml file and only if that fails, to check for logback.xml. Maven2 will guarantee that the logback-test.xml file, if places undder test/resources will not be included in the artifact it produces.

### March 29th, 2007 - Release of version 0.9.4

Significant bug fixes made to `c.q.l.access.TeeFilter` and Co. Images and other binary files are now intercepted and replayed correctly. As for "x-www-form-urlencoded" post requests, their input buffer is left untouched. In a best-effort attempt, the input buffer for "x-www-form-urlencoded" post requests is later reconstructed through the request parameters. However, it may differ from the original buffer.

The logback team released today the first version of a plugin for Eclipse that allows developpers to visualize logs generated by a running application. It offers several nice features. Please check the console plugin-in guide for more details.

### March 20th, 2007 - Release of version 0.9.3

Includes in configuration files are now supported by Joran, logback's configuration framework. A file can contain an include element that has a file or url attribute pointing to a configuration file. See the chapter about configuration in the logback's online manual for more information.

Corrected bug 53 reported by Wilkins Poe. There is now a dependencies page that shows the requirements of each of logback's modules.

After a discussion on the SLF4J mailing list started by Franck Routier, a correction has been made when logging using the JCL104-over-slf4j module. Logback now correctly shows the caller location information.

As in most logback releases, the documentation has been improved.

### March 5th, 2007 - Release of version 0.9.2

The documentation is now in the docs/ directory to allow an easier access to the logback manual and website for offline viewing.

### March 5th, 2007 - Release of version 0.9.1

Logback-class now depends on SLF4J version 1.3.0 instead of 1.2.

Numerous improvements to the documentation.

Bug #46 reported by Mark Renyolds has been fixed. The `TimeUtilTest` should now run fine under any time zone.

Bug #45, also reported by Mark Reynolds, has been fixed. There should be no `ClassCastException` thrown anymore when passing an `Object` to the printing methods using the log4j-bridge module.

### January 31st, 2007 - Release of version 0.9

This version contains a new component, namely the `ContextSelector`, that provides context separation and management when logback is used by several web-apps running under the same server. A new chapter was added to the logback manual to detail the use of the `ContextSelector`, along with its associated components.

The `JMXConfigurator` has been improved. It now shows the context's Status objects, which lets users check the internal state of logback.

The logback manual's chapter 2, about logback's architecture, has been updated with two sections: Under the hood and Performance.

### January 23th, 2007 - Release of version 0.8.1

This version contains new components in the Access module, allowing users to display the full HttpServletRequest or HttpServletResponse of an access event.

The documentation section has been updated. The short introduction was split into the chapter 1 and chapter 2 of the logback manual. The chapters about Appenders and Layouts have been updated to document new components of logback.

A demonstration webApp presenting logback's major components is available. A document explains how to run it, and provides a step-by-step visit of the demo.

A first translation of logback jars to JDK1.4 is present in this release.

### January 12th, 2007 - Release of version 0.8

This version contains a whole new chapter, namely Chapter 3, about logback configuration. Several other documentation pages have been improved.

Logback now uses Generics in many components.

Several new components have been added to logback. A JMX Configurator now allows users to see and modify loggers or reload configuration among other possibilities. A document about this configurator is available in the corresponding section of the site. We'd like to thank Sebastian Davids for his ideas and contributions to this component.

A JMSTopicAppender and JMSQueueAppender are now available, as well as two new filters: LevelFilter and ThresholdFilter. A refactoring was done in the filters objects to ease the implementation of custom filters.

### December 19th, 2006 - Release of version 0.7.1

Version 0.7.1 of logback has been released.

This version contains more detailled information about logback access module, and its JMX components. A dedicated page explains how to configure and use logback access in Tomcat and Jetty, and access some of its components via JMX.

### December 18th, 2006 - Release of version 0.7

Version 0.7 of logback has been released.

Logback now ships with a new module: log4j-bridge. This new module can be used to intercept log4j calls and redirects them to logback components. More information about this module can be found in the corresponding documentation page.

The documentation has been vastly updated. Two new chapters, namely Filters and MDC, are available in the manual section.

### November 30th, 2006 - Release of version 0.6

Version 0.6 of logback has been released.

Logback classic now supports automatic configuration, allowing test and production environment configuration. `TurboFilters` make their first appearance in a logback release. They provide ultra-fast filtering possibilities. The logging context now supports listeners which will be contacted each time the context is reset or started. `SMTPAppender` allows for much more flexible configuration than before.

In logback access, new Appenders are available, namely `SocketAppender` and `DBAppender`. Logback access now supports filtering and event evaluations. A `CountingFilter` has been added. It provides statistical views of server access, reachable via JMX.

The documentation has also been improved. A complete new chapter has been added about Appenders, the short introduction to logback classic has been updated and a new module, containing many configuration examples has been added.

Logback now uses continous integration in its development.

Tests have been improved, many new have been added. This release also provides some bug fixes.

### October 26th, 2006 - Release of version 0.5

Version 0.5 of logback has been released.

This release offers a important improvements in Joran. In particular, Joran can now replay configuration elements.

As in the previous release, a major area of work is the documentation which is being continously improved.

### October 9th, 2006 - Release of version 0.4

Version 0.3 of logback has been released.

This release includes an improved access module, with specific implementations for the Jetty and Tomcat servers. Documentation was also added to show how to integrate logback-access with Jetty.

As for the classic module, several appenders and layouts have been added or improved. The error reporting of logback has also been enhanced, presenting the user with a link to an online page explaining possible reasons for the error.

A joran documentation was added, with examples in the core module.

### September 8th, 2006 - Release of version 0.3

Version 0.3 of logback has been released.

This release offers several new Appenders, support for Mapped Diagnostic Context, improved tests and documentation

In response to a bug report by Rickard Nilsson on the logback mailing list, a bug affecting parametrized logging was fixed.

We also released a PropertiesTranslator webapp that converts log4j.properties files to joran configuration files (in XML format).

### August 23th, 2006 - Release of version 0.2.5

Version 0.2.5 of logback has been released.

This release offers better documentation, with a number of corrections made in the short introduction to logback-classic.

### August 15th, 2006 - Release of version 0.2

Version 0.2 of logback has been released.

It offers better tests, some more functionality, and enhanced documentation. We also improved the site design to make it simpler and more efficient.

### July 26th, 2006 - Release of version 0.1

Version 0.1 of logback has been released.

### February 9th, 2006 - Logback web-site goes live

The logback web-site goes live on the 9th of February. At its present state, it is pretty primitive but updates will follow.