<?xml version="1.0"?>
<!--
Copyright 2006 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.
-->
<document>

  <properties>
    <title>Issue tracking</title>
    <author email="commons-dev@jakarta.apache.org">Commons Documentation Team</author>
  </properties>

  <body>
    <!-- ================================================== -->
    <section name="Issue tracking">
      <p>
        Commons Logging uses <a href="http://issues.apache.org/bugzilla/">ASF Bugzilla</a> for tracking issues.
        To use Bugzilla you may need to <a href="http://issues.apache.org/bugzilla/createaccount.cgi">create an account</a>.
      </p>
      <p>
        If you would like to report a bug, or raise an enhancement request with
        Commons Logging please do the following:
        <ol>
        <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;product=Commons&amp;component=Logging">Search existing open bugs</a>.
        If you find your issue listed then please add a comment with your details.</li>
        <li><a href="http://mail-archives.apache.org/mod_mbox/jakarta-commons-dev/">Search the mailing list archive</a>.
        You may find your issue or idea has already been discussed.</li>
        <li><a href="http://issues.apache.org/bugzilla/enter_bug.cgi?product=Commons&amp;component=Logging&amp;version=1.1%20Final&amp;short_desc=%5Blogging%5D%20%22Your%20subject%20heading%20here%22&amp;comment=Please%20provide%20details%20here.%20Its%20best%20to%20submit%20patches%20that%20alter%0D%0Aexisting%20file%20content%20in%20%22unified%20diff%22%20format.%20%0D%0A%0D%0ASubmissions%20that%20provide%20new%20files%20can%20be%20supplied%20as%20direct%20file%0D%0Aattachments%20or%20archives%20in%20zip%20or%20tar.gz%20format.%20Please%20be%20kind%20%0D%0Aenough%20to%20identify%20the%20format%20of%20the%20attached%20archive%20as%20Bugzilla%0D%0Atends%20to%20strip%20these%20characterstics%20by%20removing%20the%20files%20extension.">Submit a bug report or enhancement request</a>.
        Please prefix all new issues with [logging] in the summary line.
        </li>
        </ol>
      </p>
      <p>
        Please also remember these points:
        <ul>
          <li>the more information you provide, the better we can help you</li>
          <li>test cases are vital, particularly for any proposed enhancements</li>
          <li>the developers of Commons Logging are all unpaid volunteers</li>
        </ul>
      </p>
      <p>
        You may also find these links useful:
        <ul>
          <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;product=Commons&amp;component=Logging">All Open Logging bugs</a></li>
          <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;product=Commons&amp;component=Logging">All Closed Logging bugs</a></li>
          <li><a href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=UNCONFIRMED&amp;bug_status=NEW&amp;bug_status=ASSIGNED&amp;bug_status=REOPENED&amp;bug_status=NEEDINFO&amp;bug_status=RESOLVED&amp;bug_status=VERIFIED&amp;bug_status=CLOSED&amp;product=Commons&amp;component=Logging">All Logging bugs</a></li>
        </ul>
      </p>
    </section>
    <!-- ================================================== -->
  </body>
</document>
