<!--

 Copyright 2001-2004 The Apache Software Foundation.
 
 Licensed 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.

-->

<html>
<head>
<title>Proposal for Logging Library Package</title>
</head>
<body bgcolor="white">

<div align="center">
<h1>Proposal for <em>Logging</em> Package</h1>
</div>

<h3>(0) Rationale</h3>

<p>There is a great need for debugging and logging information inside of
Commons components such as HTTPClient and dbcp.  However, there are many
logging APIs out there and it is difficult to choose among them.
</p>

<p>The Logging package will be an ultra-thin bridge between different logging
libraries.  Commons components may use the Logging JAR to remove
compile-time/runtime dependencies on any particular logging package,
and contributors may write Log implementations for the library of their choice.
</p>

<h3>(1) Scope of the Package</h3>

<p>The package shall create and maintain a package that provides extremely
basic logging functionality and bridges to other, more sophisticated logging
implementations.
</p>

<p>
The package should :
<ul>
<li>Have an API which should be as simple to use as possible</li>
<li>Provide support for log4j</li>
<li>Provide pluggable support for other logging APIs</li>
</ul>
</p>

<p>
Non-goals:
<ul>
<li>This package will not perform logging itself, except at the most basic
    level.</li>
<li>We do not seek to become a "standard" API.</li>
</ul>
</p>

<h3>(1.5) Interaction With Other Packages</h3>

<p><em>Logging</em> relies on:
</p>

<ul>
  <li>Java Development Kit (Version 1.1 or later)
  </li>
  <li>Avalon Framework (compile-time dependency only unless this Log
      implementation is selected at runtime)
  <li>Avalon LogKit (compile-time dependency only unless this Log
      implementation is selected at runtime)
  <li>JDK 1.4 (compile-time dependency only unless this log implementation
      is selected at runtime).
  <li>Log4J (compile-time dependency only unless this Log
      implementation is selected at runtime)</li>
  <li><a href="http://sourceforge.net/projects/lumberjack/">Lumberjack</a>
      (compile-time dependency only unless this Log
      implementation is selected at runtime)</li>
</ul>

<h3>(2) Required Jakarta-Commons Resources</h3>

<ul>
<li>CVS Repository - New directory <code>logging</code> in the 
<code>jakarta-commons</code> CVS repository.</li>

<li>Initial Committers - The list is provided below. </li>

<li>Mailing List - Discussions will take place on the general
<em>commons-dev@jakarta.apache.org</em> mailing list. To help list
subscribers identify messages of interest, it is suggested that the
message subject of messages about this component be prefixed with
[Logging].</li>

<li>Bugzilla - New component "Logging" under the "Commons" product
category, with appropriate version identifiers as needed.</li>

<li>Jyve FAQ - New category "commons-logging" (when available).</li>
</ul>


<h3>(4) Initial Committers</h3>

<p>The initial committers on the Logging component shall be:</p>

<ul>
  <li>Morgan Delagrange</li>
  <li>Rodney Waldhoff</li>
  <li>Craig McClanahan</li>
</ul>

</body>
</html>
