<!--
 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 Receivers Companion for log4j 1.2.</title>
  </properties>
  <body>
    <release version="1.0" date="TDB" description="First release">
      <action issue="42102" type="add">
        Initial release of receivers companion backported from log4j 1.3.
      </action>
      <action issue="42171" type="fix">SocketHubReceiver duplicates messages</action>
      <action issue="49078" action="fix">javadoc.jar was missing NOTICE and LICENSE.</action>
      <action issue="43148" action="fix">Change regular expressions from Apache Oro to java.util.regex.</action>
    </release>
  </body>
</document>
