<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Apache Logging Services</title>

    <link href="css/asciidoctor-default.css" rel="stylesheet" type="text/css" />
    <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css" />
    <link href="css/site.css" rel="stylesheet" type="text/css" />

    <script src="js/jquery.min.js"></script>
    <script src="js/bootstrap.min.js"></script>
    <script src="js/site.js"></script>

    <!-- Google Analytics -->
    <script type="text/javascript">
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', '{{ googleAnalyticsID }}']);
        _gaq.push (['_gat._anonymizeIp']);
        _gaq.push(['_trackPageview']);

        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    </script>
</head>

<body>
<div class="navbar">
    <div class="navbar-inner">
        <div class="container">
            <a class="brand" href="https://logging.apache.org">Apache Logging Services&trade;</a>
            <ul class="nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">About<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a href="guidelines.html">Guidelines</a></li>
                        <li><a href="charter.html">Charter</a></li>
                        <li><a href="team-list.html">Team</a></li>
                        <li><a href="mailing-lists.html">Mailing lists</a></li>
                        <li><a target="_blank" href="https://cwiki.apache.org/confluence/display/LOGGING/Home">Wiki</a>
                        </li>
                    </ul>
                </li>
            </ul>
            <ul class="nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Projects<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a target="_blank" href="chainsaw/2.x/index.html">Apache chainsaw</a></li>
                        <li><a target="_blank" href="log4cxx/latest_stable/index.html">Apache log4cxx</a></li>
                        <li><a target="_blank" href="log4j/2.x/index.html">Apache log4j</a></li>
                        <li><a target="_blank" href="log4j-audit/latest/index.html">Apache log4j-audit</a></li>
                        <li><a target="_blank" href="log4j/kotlin/index.html">Apache log4j Kotlin API</a></li>
                        <li><a target="_blank" href="log4j/scala/index.html">Apache log4j Scala API</a></li>
                        <li><a target="_blank" href="log4net/2.x/index.html">Apache log4net</a></li>
                        <li><a target="_blank" href="log4php/latest/index.html">Apache log4php</a></li>
                    </ul>
                </li>
            </ul>
            <ul class="nav">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Dormant<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a target="_blank" href="log4j/1.2/index.html">Apache log4j 1.x</a></li>
                        <li><a target="_blank" href="log4j/extras/index.html">Apache log4j 1.x extras</a></li>
                    </ul>
                </li>
            </ul>

            <ul class="nav pull-right">
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown">Apache<b class="caret"></b></a>
                    <ul class="dropdown-menu">
                        <li><a target="_blank" href="https://www.apache.org/">Home</a></li>
                        <li><a target="_blank" href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
                        <li><a target="_blank" href="https://www.apache.org/licenses/">License</a></li>
                        <li><a target="_blank" href="https://www.apache.org/foundation/thanks.html">Thanks</a></li>
                        <li><a target="_blank" href="https://www.apache.org/events/current-event.html">Current Events</a></li>
                        <li><a target="_blank" href="https://www.apache.org/security/">Security</a></li>
                    </ul>
                </li>
            </ul>
        </div>
    </div>
</div>

<div class="container">
    <div class="content">
        <h3>Dormant Projects</h3>
<p>These are Logging Services Projects that have been deemed inactive since they have seen little recent<br />
development activity or have reached end-of-life. If you wish to use any of these components, you must<br />
build them yourselves. It is best to assume that these components will not be released in the near<br />
future.</p>
<div class="row">
        <div class="span4">
                <h2>Apache Log4j 1.x</h2>
                <p>The original Log4j. Reached End-Of-Life August 2015</p>
                <p><a target="_blank" class="btn" href="log4j/1.2/index.html">Project site &raquo;</a></p>
        </div>
        <div class="span4">
                <h2>Apache log4j 1 extras</h2>
                <p>Extras for log4j 1.x, like companions, receivers and more.</p>
                <p><a target="_blank" class="btn" href="log4j/extras/index.html">Project site &raquo;</a></p>
        </div>
</div>

    </div>

<div class="footer">
        <p>
            Copyright © 2017-2020 <a href="https://www.apache.org" target="external">The Apache Software Foundation</>.
            Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0"
            target="external">Apache Software License, Version 2.0</> Please read our "privacy policy":privacy-policy.html.
        </p><p>
            Apache, Apache chainsaw, Apache log4cxx, Apache log4j, Apache log4net, Apache log4php and the Apache
            feather logo are trademarks of The Apache Software Foundation.	Oracle and Java are registered trademarks
            of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
        </p><p>
            Site powered by <a href="https://getbootstrap.com/" target="external">Bootstrap</a>
            and <a href="https://jquery.com/" target="external">jQuery</a>.
        </p>
</div>
</div>
</body>
</html>
