<!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?version=20231214" 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>
    <link rel="alternate" type="application/rss+xml" title="ASF Loggin Services" href="/feed.xml">
</head>


<body>
<div class="navbar">
    <div class="navbar-inner">
        <div class="container">
            <a class="brand" href="/">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="/processes.html">Retirement Processes</a>
                        <li><a target="_blank" href="https://cwiki.apache.org/confluence/display/LOGGING/Home">Wiki</a>
                        <li><a href="/what-is-logging.html">What is logging?</a></li>
                        <li><a href="/activity-monitor">Activity monitor</a></li>
                    </ul>
                </li>
            </ul>
            <ul class="nav">
                <li><a href="/download.html">Download</a></li>
            </ul>
            <ul class="nav">
                <li><a href="/support.html">Support</a></li>
            </ul>
            <ul class="nav">
                <li><a href="/security.html">Security</a></li>
            </ul>
            <ul class="nav">
                <li><a href="/xml/ns">XML Schemas</a></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>
                        <li><a target="_blank" href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li>
                    </ul>
                </li>
            </ul>
            <ul class="nav pull-right">
                <li><a href="/blog">Blog</a></li>
            </ul>
        </div>
    </div>
</div>


<div class="container">
    <div class="content">
        <h3 id="dormant-projects">Dormant Projects</h3>

<p>These are Logging Services Projects that have been deemed inactive since they have seen little recent
development activity or have reached end-of-life. If you wish to use any of these components, you must
build them yourselves. It is best to assume that these components will not be released in the near 
future.</p>

<div class="projects">
    
      
    
      
    
      
    
      
    
      
      <div class="project">
        <h2>Chainsaw</h2>
        <p>A GUI-based log viewer intended as a companion to Log4j®.</p>
        <p><a target="_blank" class="btn" href="/chainsaw">Project site &raquo;</a></p>
      </div>
      
    
      
    
      
    
      
    
      
      <div class="project">
        <h2>Log4j® 1</h2>
        <p>The very first Log4j® major release. Reached End-Of-Life August 2015.</p>
        <p><a target="_blank" class="btn" href="/log4j/1.x">Project site &raquo;</a></p>
      </div>
      
    
      
      <div class="project">
        <h2>Log4j® 1 Extras</h2>
        <p>Extras for Log4j® 1; companions, receivers, and more.</p>
        <p><a target="_blank" class="btn" href="/log4j/extras">Project site &raquo;</a></p>
      </div>
      
    
      
      <div class="project">
        <h2>Log4php</h2>
        <p>A versatile logging framework for PHP. Originally a port of Log4j® to PHP, it has grown to include various PHP specific features.</p>
        <p><a target="_blank" class="btn" href="/log4php">Project site &raquo;</a></p>
      </div>
      
          
</div>

    </div>    
</div>


<div class="footer">
    <div class="container">
        <p>
            Copyright © 2017-2024 <a href="https://www.apache.org" target="external">The Apache Software Foundation</a>.
            Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0"
            target="external">Apache Software License, Version 2.0</a> Please read our <a href="https://privacy.apache.org/policies/privacy-policy-public.html">privacy policy</a>.
        </p><p>
            Apache, Chainsaw, log4cxx, Log4j, Log4net, log4php and the Apache 
            feather logo are trademarks or registered 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>
    </div>
</div>
<!-- Matomo -->
<script>
  var _paq = window._paq = window._paq || [];
  _paq.push(["disableCookies"]);
  _paq.push(['trackPageView']);
  _paq.push(['enableLinkTracking']);
  (function() {
    var u="https://analytics.apache.org/";
    _paq.push(['setTrackerUrl', u+'matomo.php']);
    _paq.push(['setSiteId', '42']);
    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
    g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
  })();
</script>
<noscript><p><img src="https://analytics.apache.org/matomo.php?idsite=42&amp;rec=1" style="border:0;" alt="" /></p></noscript>
<!-- End Matomo Code -->
</body>
</html>
