<!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">
        <div class="hero-unit">
          <div class="pull-right"><img class="logo" src="img/feather.gif" /></div>
          <h1>Apache logging services</h1>
          <p>The Apache Logging Services Project creates and maintains open-source software related to the logging of
            application behavior and released at no charge to the public.</p>
        </div>

        <div class="row">
          <div class="span4">
            <h2>Apache Log4j</h2>
            <p>Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x.</p>
            <p><a target="_blank" class="btn" href="log4j/2.x/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Apache log4php</h2>
            <p>A versatile logging framework for PHP. Originally a port of Apache log4j to PHP, it has grown to include
              various PHP specific features.</p>
            <p><a target="_blank" class="btn" href="log4php/latest/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Apache log4cxx</h2>
            <p>Apache log4cxx is a logging framework for C++ patterned after log4j.</p>
            <p><a target="_blank" class="btn" href="log4cxx/latest_stable/index.html">Project site &raquo;</a></p>
          </div>

        </div>


        <div class="row">
          <div class="span4">
            <h2>Apache chainsaw</h2>
            <p>A GUI based log viewer. Chainsaw is a companion application to log4j written by members of the log4j
              development community.</p>
            <p><a target="_blank" class="btn" href="chainsaw/2.x/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Apache Log4j Audit</h2>
            <p>Audit logging framework built upon Apache Log4j 2.</p>
            <p><a target="_blank" class="btn" href="log4j-audit/latest/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Apache Log4j Scala</h2>
            <p>Scala API for Log4j 2.</p>
            <p><a target="_blank" class="btn" href="log4j/scala/index.html">Project site &raquo;</a></p>
          </div>

        </div>

        <div class="row">
          <div class="span4">
            <h2>Apache Log4j Kotlin</h2>
            <p>Kotlin API for Log4j 2.</p>
            <p><a target="_blank" class="btn" href="log4j/kotlin/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Apache Log4Net</h2>
            <p>A port of the original Apache log4j framework to the Microsoft .NET runtime.</p>
            <p><a target="_blank" class="btn" href="log4net/2.x/index.html">Project site &raquo;</a></p>
          </div>
          <div class="span4">
            <h2>Dormant Projects</h2>
            <p>Logging Services projects that are no longer actively maintained.</p>
            <p><a target="_blank" class="btn" href="dormant.html">Dormant Projects &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>
