<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<document>
  <properties>
    <title>Changes</title>
    <author email="rgoers@apache.org">Ralph Goers</author>
  </properties>

  <body>
    <release version="2.0-beta1" date="2012-09-18" description="Bug fixes and enhancements">
      <action dev="rgoers" type="add">
        Added AsynchAppender.
      </action>
      <action issue="LOG4J-81" dev="rgoers" type="fix">
        PatternLayout was not honoring format modifiers.
      </action>
      <action dev="rgoers" type="fix">
        Created web module to allow web applications to include the Log4j context listener in WEB-INF/lib even if
        Log4j is in the container's class path. Allow locating the LoggerContext to include the ClassLoader. Updated
        the Loader utility to always choose the child ClassLoader. Verified in Jboss 5 and Tomcat.
      </action>
      <action issue="LOG4J2-82" dev="rgoers" type="fix">
        MarkerFilter called MarkerManager.getMarker causing the Marker to be created during the processing of the
        configuration. This prevents the application from creating the Marker with any parents. MarkerWrapper in
        SLF4J-impl was getting a ClassCastException in instanceOf because the Marker isn't a MarkerWrapper.
      </action>
      <action issue="LOG4J2-80" dev="rgoers" type="fix" due-to="Oliver Lamy">
        Allow Log4j 2 to be used as the implementation with SLF4J and SLF4J's jcl-over-slf4j by adding filtering
        to the log method in SLF4JLogger.
      </action>
      <action issue="LOG4J2-78" dev="rgoers" type="fix">
        LogFactoryImpl.setAttribute in the Commons Logging bridge got a NullPointerException when passed a null value.
        It will now remove the attribute.
      </action>
      <action issue="LOG4J2-77" dev="rgoers" type="fix">
        RoutingAppender was calling the stop method for each of its referenced Appenders and was calling
        the stop method of the default Appender a second time. It will now only call the stop method of
        Appenders it creates.
      </action>
      <action issue="LOG4J2-76" dev="rgoers" type="fix">
        RewriteAppender was calling the stop method of the referenced appender causing the referenced appender's
        manager to have its use count decremented too many times.
      </action>
      <action issue="LOG4J2-74" dev="rgoers" type="fix">
        Logger.error(Marker, Message, Throwable) was internally using Level.TRACE.
      </action>
      <action issue="LOG4J2-75" dev="rgoers" type="fix">
        Enhanced Log4jContextListener to accept a configuration file location. Modified FileConfigurationMonitor
        to monitor files configured that way. Fixed other reconfiguration related bugs. Tested in JBoss and
        Tomcat.
      </action>
      <action issue="LOG4J2-72" dev="rgoers" type="fix">
        NullPointerException in RollingFileManager when filePattern does not cause the file to be compressed.
      </action>
      <action issue="LOG4J2-71" dev="rgoers" type="fix">
        FileRenameAction did not create the parent directories of the archive files causing the rollover to fail.
      </action>
      <action dev="rgoers" type="update">
        Update the versions of SLF4J and Logback.
      </action>
    </release>
    <release version="2.0-alpha2" date="2012-08-24" description="Bug fixes and minor enhancements">
      <action issue="LOG4J2-70" dev="rgoers" type="add">
        Add getLogger(Class) to LogManager.
      </action>
      <action issue="LOG4J2-69" dev="rgoers" type="add">
        Allow Flume agents to be embedded into the Flume Appender.
      </action>
      <action issue="LOG4J2-68" dev="rgoers" type="add">
        Add support for formatting using String.format().
      </action>
      <action issue="LOG4J2-67" dev="rgoers" type="add">
        Allow components besides core to create a PluginMap for faster plugin loading and not
        having to specify the plugin package in the configuration.
      </action>
      <action issue="LOG4J2-64" dev="rgoers" type="fix">
        Fix compilation problems in Java 7.
      </action>
      <action issue="LOG4J2-65" dev="rgoers" type="fix">
        Allow variable substitution on the configuration attributes and on the root log level.
      </action>
    </release>
    <release version="2.0-alpha1" date="2012-07-29" description="Rewrite of Log4j">
      <action issue="LOG4J2-60" dev="rgoers" type="add" due-to="Shane Kelly">
        Added ability to filter on the appender-ref by adding either a level or a filter.
      </action>
      <action issue="LOG4J2-56" dev="rgoers" type="fix" due-to="John Owen Atala">
        Level.toLevel would throw an IllegalArgumentException instead of returning the default value.
      </action>
      <action issue="LOG4J2-51" dev="rgoers" type="fix" due-to="John Vasileff">
        Remove LoggerContext support for custom logger factories. All Loggers returned
        by LoggerContext should be compatibile and of the same type.
      </action>
      <action issue="LOG4J2-50" dev="rgoers" type="fix" due-to="John Vasileff">
        Make sure all application facing log methods use their own FQCN. This patch
        resolves a unit test failure for the %C pattern when using the Category logger.
      </action>
    </release>
  </body>
</document>
