<!--
 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>Apache Logging Component Companion for log4j 1.2.</title>
  </properties>
  <body>
    <release version="1.0" date="TBD" description="Initial release">
      <action action="update">Upgraded to Apache Maven 3</action>
      <action issue="42094" type="add">Component framework backported from log4j 1.3.</action>
      <action issue="49390" type="add">component 1.0 release preparation</action>
      <action issue="49078" action="fix">javadoc.jar was missing NOTICE and LICENSE.</action>
    </release>
  </body>
</document>
