<!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 target="_blank" href="guidelines.html">Guidelines</a></li>
                        <li><a target="_blank" href="charter.html">Charter</a></li>
                        <li><a target="_blank" href="team-list.html">Team</a></li>
                        <li><a target="_blank" 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">
        <h1>Charter</h1>
<p>On December 17<sup>th</sup> 2003. the Apache Board voted to establish the Apache Logging Services Project.</p>
<p>The following is an extract from the minutes of the meeting of the board of directors. You can read the full minutes <a href="http://www.apache.org/foundation/records/minutes/2003/board_minutes_2003_12_17.txt">here</a>.</p>
<blockquote>
<h3>A. Establishment of the Apache Logging Services Project</h3>
<p><span class="caps">WHEREAS, </span>the Board of Directors deems it to be in the best interests of the Foundation and consistent with the Foundation's purpose to establish a Project Management Committee charged with the creation and maintenance of open-source software related to the logging of application behavior, for distribution at no charge to the public.</p>
<p><span class="caps">NOW, THEREFORE,</span> BE IT <span class="caps">RESOLVED, </span>that a Project Management Committee (PMC), to be known as the "Apache Logging Services <span class="caps">PMC</span>", be and hereby is established pursuant to Bylaws of the Foundation; and be it further</p>
<p><span class="caps">RESOLVED, </span>that the Apache Logging Services <span class="caps">PMC </span>be and hereby is responsible for the creation and maintenance of software for managing the logging of application behavior, and for related software components, based on software licensed to the Foundation; and be it further</p>
<p><span class="caps">RESOLVED, </span>that the office of "Vice President, Apache Logging Services" be and hereby is created, the person holding such office to serve at the direction of the Board of Directors as the chair of the Apache Logging Services <span class="caps">PMC, </span>and to have primary responsibility for management of the projects within the scope of responsibility of the Apache Logging Services <span class="caps">PMC</span>; and be it further</p>
<p><span class="caps">RESOLVED, </span>that the persons listed immediately below be and hereby are appointed to serve as the initial members of the Apache Logging Services <span class="caps">PMC</span>:</p>
<ul>
<li>Scott Deboy</li>
<li>Ceki Gülcü</li>
<li>Jacob Kjome</li>
<li>Yoav Shapira</li>
<li>Paul Smith</li>
<li>Mark Womack</li>
</ul>
<p>     <br />
<span class="caps">NOW, THEREFORE,</span> BE IT <span class="caps">FURTHER RESOLVED, </span>that Mr. Ceki Gülcü be and hereby is appointed to the office of Vice President, Apache Logging Services, to serve in accordance with and subject to the direction of the Board of Directors and the Bylaws of the Foundation until death, resignation, retirement, removal or disqualification, or until a successor is appointed; and be it further </p>
<p><span class="caps">RESOLVED, </span>that the initial Apache Logging Services <span class="caps">PMC </span>be and hereby is tasked with the creation of a set of bylaws intended to encourage open development and increased participation in the Apache Logging Services Project; and be it further</p>
<p><span class="caps">RESOLVED, </span>that the initial Logging Services <span class="caps">PMC </span>be and hereby is tasked with the migration and rationalization of the log4j Apache Jakarta subproject; and be it further</p>
<p><span class="caps">RESOLVED, </span>that the initial Logging Services <span class="caps">PMC </span>be and hereby is tasked with the migration and integration of the sister projects, namely but not exclusively, Log4Perl, Log4Net, Log4Cxx (c++), Log4CPlus, Log4PHP and Log4plsql, subject to the will and approval of the respective project owners and communities.</p>
<p>This was passed by Unanimous Vote.</p>
</blockquote>

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