<?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>Overview</title>
  <author email="dev@commons.apache.org">Commons Documentation Team</author>
 </properties>

 <body>

<section name="The Logging Component">

<p>When writing a library it is very useful to log information. However there
are many logging implementations out there, and a library cannot impose the use
of a particular one on the overall application that the library is a part of.</p>

<p>The Logging package is an ultra-thin bridge between different logging
implementations.  A library that uses the commons-logging API can be used with
any logging implementation at runtime. Commons-logging comes with support for a
number of popular logging implementations, and writing adapters for others is a
reasonably simple task.</p>

<p>Applications (rather than libraries) may also choose to use commons-logging.
While logging-implementation independence is not as important for applications
as it is for libraries, using commons-logging does allow the application to
change to a different logging implementation without recompiling code. 
</p><p>
Note that commons-logging does not attempt to initialise or terminate the underlying
logging implementation that is used at runtime; that is the responsibility of
the application. However many popular logging implementations do automatically
initialise themselves; in this case an application may be able to avoid
containing any code that is specific to the logging implementation used.</p>

</section>


<section name="Documentation">

<p>The <a href="RELEASE-NOTES.txt">
Release Notes</a> document the new features and bug fixes that have been
included in the latest release.</p>

<p>The <a href="http://commons.apache.org/logging/apidocs/index.html">
Javadoc API documents</a> for the latest release are available online.
In particular, you should read the package overview of the <code>org.apache.commons.logging</code>
package. In addition, there is a (short)
<a href="guide.html">User Guide</a>.</p>

<p>The <a href="http://wiki.apache.org/commons/Logging">Wiki site</a> has
the latest updates, an FAQ and much other useful information.</p>
<p>
Users needing to become experts or wanting to help develop JCL should
(in addition) consult the <a href='tech.html'>Tech Guide</a>.
This gives short introductions to topics such as advanced class loading.
</p>
</section>


<section name="Releases">
    <p>
Binary and source distributions are available
       <a href="http://commons.apache.org/logging/download_logging.cgi">here</a>.
    </p>
    <subsection name='1.2 Release - July 2014'>
      <p>The main purpose of the 1.2 release is to drop support for Java 1.1.</p>
      <p>For a full list of changes since the 1.1.3 release, please refer to the
      <a href="changes-report.html">change-report</a>.</p> 
    </subsection>
    <subsection name='1.1.3 Release - May 2013'>
      <p>The 1.1.3 release only updates the Bundle-SymbolicName in the manifest
      to "org.apache.commons.logging".</p>
      <p>For a full list of changes since the 1.1.1 release, please refer to the
      <a href="changes-report.html">change-report</a>.</p> 
    </subsection>
    <subsection name='1.1.2 Release - March 2013'>
      <p>The 1.1.2 release is a packaging of bug fixes since release 1.1.1.</p>
      <p>For the full details, see the release notes for this version.</p> 
    </subsection>
    <subsection name='1.1.1 Release - November 2007'>
      <p>
       This release is a minor update to the 1.1 release that fixes a number of bugs, and 
       resolves packaging issues for maven 1.x and maven 2.x users.
      </p>
      <p>For the full details, see the release notes for this version.</p> 
    </subsection>
    <subsection name='1.1 Release - 10 May 2006'>
      <p>This release makes several changes that are intended to resolve issues that
      have been encountered when using commons-logging in servlet containers or j2ee
      containers where complex classpaths are present and multiple copies of
      commons-logging libraries are present at different levels.</p>
      <p>This release also adds support for the TRACE level added to log4j in the
      1.2.12 release. In former commons-logging versions, the log.trace method
      caused log4j to output the message at the DEBUG level (the lowest level
      supported by log4j at that time).</p>
      <p>For the full details, see the release notes for this version.</p> 
    </subsection>
    <subsection name='1.0.5 Release (Alpha)'>
      <p>
        <strong>Note:</strong> the 1.0.5 release was abandoned at alpha status.
      </p>
      <p>
    The next JCL release will be designated 1.1 since we feel this more 
    accurately reflects the improvements made to the codebase.</p>
    </subsection>
    <subsection name='1.0.4 Release - 16 Jun 2004'>
      <p>The 1.0.4 release of commons-logging is a service release containing support
      for both the 1.2.x and 1.3.x series of Log4J releases.</p>
    </subsection>
    <subsection name='1.0.3 Release - 7 Apr 2003'>
      <p>The 1.0.3 release is primarily a maintenance and code cleanup release with minimal new features.</p>
    </subsection>
    <subsection name='1.0.2 Release - 27 September 2002'>
      <p>The 1.0.2 release is a packaging of bug fixes since release 1.0.1.</p>
    </subsection>
    <subsection name='1.0.1 Release - 13 August 2002'>
      <p>The 1.0.1 release is a packaging of bug fixes and minor enhancements since release 1.0.</p>
    </subsection>
</section>
<section name="Development Builds">
  <p>Regular builds of the current SVN HEAD code are made available. See the 
  <a href="http://wiki.apache.org/commons/Logging">wiki</a> for details.</p>
</section>
</body>
</document>
