<?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>Download Apache log4net</title>
  </properties>

  <body>
    <section name="Download Apache log4net&#x2122;">

      <p>Apache log4net is distributed under the <a
      href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache
      License, version 2.0</a>.</p>

      <p>Starting with log4net 1.2.11 log4net is available as source only or
      binary only release.</p>

      <p>Users who download the ZIP files to Windows may need to unblock the
      archive (right click on the ZIP and press the "Unblock" button)
      before extracting it.</p>
  
      <subsection name="Using a Mirror">
        <p>We recommend you use a mirror to download our release
        builds, but you <strong>must</strong> verify the integrity of
        the downloaded files using signatures downloaded from our main
        distribution directories. Recent releases (48 hours) may not
        yet be available from the mirrors.</p>

        <p>You are currently using <b>[preferred]</b>.  If you
        encounter a problem with this mirror, please select another
        mirror.  If all mirrors are failing, there are <i>backup</i>
        mirrors (at the end of the mirrors list) that should be
        available.
        <br></br>
        [if-any logo]<a href="[link]"><img align="right" src="[logo]" border="0"></img></a>[end]
        </p>

        <form action="[location]" method="get" id="SelectMirror">
          <p>
            Other mirrors: 
            <select name="Preferred">
              [if-any http]
              [for http]<option value="[http]">[http]</option>[end]
              [end]
              [if-any ftp]
              [for ftp]<option value="[ftp]">[ftp]</option>[end]
              [end]
              [if-any backup]
              [for backup]<option value="[backup]">[backup] (backup)</option>[end]
              [end]
            </select>
            <input type="submit" value="Change"></input>
          </p>
        </form>

        <p>The <a
        href="http://www.apache.org/dist/logging/log4net/KEYS">KEYS</a> link
        links to the code signing keys used to sign the product.  The
        <code>PGP</code> link downloads the OpenPGP compatible
        signature from our main site.  The <code>MD5</code> link
        downloads the checksum from the main site.</p>
      </subsection>
    </section>

    <section name="log4net 1.2.13">

      <subsection name="Source">
        <table>
          <tr>
            <td><a href="[preferred]/logging/log4net/source/log4net-1.2.13-src.zip">log4net-1.2.13-src.zip</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/source/log4net-1.2.13-src.zip.md5">md5</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/source/log4net-1.2.13-src.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>

      <subsection name="Binaries">

        <p>There are two different binary releases,
        <code>oldkey</code> and <code>newkey</code>.  Both contain
        assemblies built for most supported platforms and have been
        built from the same code base, they only differ in the strong
        name key used to sign the assemblies.</p>

        <p>See <a href="./release/faq.html#two-snks">the FAQ</a> for
        background.  We recommend you use the assemblies signed with
        the "new" key whenever possible.</p>

        <table>
          <tr>
            <td><a href="[preferred]/logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip">log4net-1.2.13-bin-newkey.zip</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip.md5">md5</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/binaries/log4net-1.2.13-bin-newkey.zip.asc">pgp</a></td>
          </tr>
          <tr>
            <td><a href="[preferred]/logging/log4net/binaries/log4net-1.2.13-bin-oldkey.zip">log4net-1.2.13-bin-oldkey.zip</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/binaries/log4net-1.2.13-bin-oldkey.zip.md5">md5</a></td>
              <td><a href="http://www.apache.org/dist/logging/log4net/binaries/log4net-1.2.13-bin-oldkey.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>

    </section>

    <section name="Archives">
      <p>Release 1.2.11 and all more recent releases are available
      from the Apache Software Foundation's <a
      href="http://archive.apache.org/dist/logging/log4net/">distribution
      archive</a>.</p>

      <p>The 1.2.10 and 1.2.9 releases have been created while log4net
      was still undergoing incubation and those releases are available
      from the <a
      href="http://archive.apache.org/dist/incubator/log4net/">distribution
      archive</a> for the Incubator project.</p>

      <p>Previous releases of log4net are available from the
      <a href="http://sourceforge.net/project/showfiles.php?group_id=31983&amp;release_id=171808">SourceForge Project Site</a>.</p>
    </section>
  </body>

  <section name="Verify Releases">

    <p>It is essential that you verify the integrity of the downloaded
    files using the PGP signature or MD5 checksums.  The checksums are
    not as strong indicators as the PGP signature.</p>

    <p>Please read <a
    href="http://httpd.apache.org/dev/verification.html">Verifying
    Apache HTTP Server Releases</a> for more information on why you
    should verify our releases.  The PGP keys used to sign our
    distributions are part of the <a
    href="http://www.apache.org/dist/logging/log4net/KEYS">KEYS
    file</a>.</p>
  </section>
</document>
