<?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>

    </section>

    <section name="log4net 2.0.11">

      <subsection name="Source">
        <table>
          <tr>
            <td><a href="https://downloads.apache.org/logging/log4net/source/apache-log4net-source-2.0.11.zip">apache-log4net-source-2.0.11.zip</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/source/apache-log4net-source-2.0.11.zip.sha512">sha512</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/source/apache-log4net-source-2.0.11.zip.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>

      <subsection name="Binaries">
        <p>Binaries are available in a zip file or nupkg, which is also available from <a href="https://www.nuget.org/packages/log4net/">nuget.org</a></p>
        <table>
          <tr>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net-binaries-2.0.11.zip">log4net-binaries-2.0.11.zip</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net-binaries-2.0.11.zip.sha512">sha512</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net-binaries-2.0.11.zip.asc">pgp</a></td>
          </tr>
          <tr>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net.2.0.11.nupkg">log4net-2.0.11.nupkg</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net.2.0.11.nupkg.sha512">sha512</a></td>
            <td><a href="https://downloads.apache.org/logging/log4net/binaries/apache-log4net.2.0.11.nupkg.asc">pgp</a></td>
          </tr>
        </table>
      </subsection>

    </section>

    <section name="Keys">
        <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>
    </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>
