~~ 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.
 ------
 Apache Logging Component Companion for log4j 1.2
 ------
 ------
 ------

   Apache Logging Component Companion implements on log4j 1.2 the component framework from the
   discontinued log4j 1.3 development activity to support backporting
   log4j 1.3 code that depends on the framework.

   This project is a project of {{{http://www.apache.org} The Apache Software Foundation}}
   and is part of a large community of developers and users.