<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!--
   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.
-->
<!-- Generated by Apache Maven Doxia at 2018-06-10 -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Log4j_Audit &#x2013; Project Guidelines - Apache Log4j Audit</title>
    <link rel="stylesheet" href="./css/bootstrap.min.css" type="text/css" />
    <link rel="stylesheet" href="./css/site.css" type="text/css" />
    <script type="text/javascript" src="./js/jquery.min.js"></script>
    <script type="text/javascript" src="./js/bootstrap.min.js"></script>
    <script type="text/javascript" src="./js/prettify.min.js"></script>
    <script type="text/javascript" src="./js/site.js"></script>
                    <meta name="Date-Revision-yyyymmdd" content="20180610" />
                <meta http-equiv="Content-Language" content="en" />
        
        </head>
<body class="composite">
<a  href="http://www.apache.org/events/current-event.html">
    <img class=logo-left src="http://www.apache.org/events/current-event-234x60.png"/>
</a>
<img class="logo-right" src="./images/logo.png" alt="Apache log4j logo" />
<a href="https://logging.apache.org/">
    <img class="logo-center" src="./images/ls-logo.jpg" alt="Apache logging services logo" />
</a>
<div class="clear"></div>

<div class="navbar">
    <div class="navbar-inner">
        <div class="container-fluid">
            <a class="brand" href="http://logging.apache.org/log4j-audit">Apache Log4j Audit &trade;</a>
            <ul class="nav">
                        <li>
                        
                
            <a href="https://cwiki.apache.org/confluence/display/LOGGING/Home" class="external" target="_blank" title="Logging Wiki">Logging Wiki</a>
            </li>
                    <li>
                        
                
            <a href="https://www.apache.org/" class="external" target="_blank" title="Apache">Apache</a>
            </li>
                    <li>
                        
                
            <a href="https://logging.apache.org/" class="external" target="_blank" title="Logging Services">Logging Services</a>
            </li>
                    <li>
                        
                
            <a href="https://github.com/apache/logging-log4j-audit" class="external" target="_blank" title="GitHub">GitHub</a>
            </li>
    </ul>
        </div>
    </div>
</div>

<div class="container-fluid">
    <table class="layout-table">
        <tr>
            <td class="sidebar">
                <div class="well sidebar-nav">
                            <ul class="nav nav-list">
                                                        <li class="nav-header"><i class="icon-home"></i>Apache Log4j Audit™</li>
                                                                                    <li class="none">
                                <a href="index.html" title="About">About</a>
                </li>
                                                            <li class="none">
                                <a href="download.html" title="Download">Download</a>
                </li>
                                                            <li class="none">
                                <a href="gettingStarted.html" title="Getting Started">Getting Started</a>
                </li>
                                                            <li class="none">
                                <a href="catalog.html" title="Audit Catalog">Audit Catalog</a>
                </li>
                                                            <li class="none">
                                <a href="requestContext.html" title="RequestContext">RequestContext</a>
                </li>
                                                            <li class="none">
                                <a href="sample.html" title="Sample Project">Sample Project</a>
                </li>
                                                            <li class="none">
                                <a href="changelog.html" title="Changelog">Changelog</a>
                </li>
                                                            <li class="none">
                                <a href="apidocs/index.html" title="Javadoc">Javadoc</a>
                </li>
                            </ul>
        <ul class="nav nav-list">
                                                        <li class="nav-header"><i class="icon-pencil"></i>For Contributors</li>
                                                                                    <li class="none">
                                <a href="build.html" title="Building Log4j Audit from Source">Building Log4j Audit from Source</a>
                </li>
                                                                <li class="none active">
                                <a href="guidelines.html" title="Guidelines">Guidelines</a>
                </li>
                                                            <li class="none">
                                <a href="javastyle.html" title="Style Guide">Style Guide</a>
                </li>
                            </ul>
        <ul class="nav nav-list">
                                                        <li class="nav-header"><i class="icon-cog"></i>Component Reports</li>
                                                                                    <li class="none">
                                <a href="log4j-audit/log4j-audit-api/index.html" title="Audit API">Audit API</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-audit/log4j-audit-war/index.html" title="Audit Service">Audit Service</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-audit/log4j-audit-maven-plugin/index.html" title="Maven Plugin">Maven Plugin</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-catalog/log4j-catalog-api/index.html" title="Catalog API">Catalog API</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-catalog/log4j-catalog-git/index.html" title="Git Catalog Access">Git Catalog Access</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-catalog/log4j-catalog-jpa/index.html" title="JPA Catalog Access">JPA Catalog Access</a>
                </li>
                                                            <li class="none">
                                <a href="log4j-catalog/log4j-catalog-war/index.html" title="Catalog Editor">Catalog Editor</a>
                </li>
                            </ul>
        <ul class="nav nav-list">
                                                        <li class="nav-header"><i class="icon-info-sign"></i>Project Information</li>
                                                                                    <li class="none">
                                <a href="dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a>
                </li>
                                                            <li class="none">
                                <a href="dependency-management.html" title="Dependency Management">Dependency Management</a>
                </li>
                                                            <li class="none">
                                <a href="team-list.html" title="Project Team">Project Team</a>
                </li>
                                                            <li class="none">
                                <a href="mail-lists.html" title="Mailing Lists">Mailing Lists</a>
                </li>
                                                            <li class="none">
                                <a href="issue-tracking.html" title="Issue Tracking">Issue Tracking</a>
                </li>
                                                            <li class="none">
                                <a href="license.html" title="Project License">Project License</a>
                </li>
                                                            <li class="none">
                                <a href="source-repository.html" title="Source Repository">Source Repository</a>
                </li>
                                                            <li class="none">
                                <a href="project-summary.html" title="Project Summary">Project Summary</a>
                </li>
                            </ul>
        <ul class="nav nav-list">
                                                        <li class="nav-header"><i class="icon-cog"></i>Project Reports</li>
                                                                                    <li class="none">
                                <a href="changes-report.html" title="Changes Report">Changes Report</a>
                </li>
                                                            <li class="none">
                                <a href="jira-report.html" title="JIRA Report">JIRA Report</a>
                </li>
                                                            <li class="none">
                                <a href="rat-report.html" title="RAT Report">RAT Report</a>
                </li>
                            </ul>
                    </div>
                <div id="poweredBy">
                                                <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy">
            <img class="poweredBy" alt="Built by Maven" src="./images/maven-feather.png" />
        </a>
                            </div>
            </td>
            <td class="content">
                <!-- 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. -->

  
    <div class="section">
<h2><a name="Apache_Log4j_Project_Guidelines"></a>Apache Log4j Project Guidelines</h2>

      
<p>This document defines the guidelines for the <a class="externalLink" href="http://logging.apache.org/log4j/2.x">Apache Log4j
        Project</a>. It includes definitions of how conflict
        is resolved by voting, who is able to vote, the procedures to follow
        for proposing and making changes as well as guidelines for changing code.</p>
      
<p>The objective here is to avoid unnecessary conflict over changes and
        continue to produce a quality system in a timely manner. Not all conflict
        can be avoided, but at least we can agree on the procedures for conflict to
        be resolved.</p>
      <a name="people-places-and-things"></a>
      
<div class="section">
<h3><a name="People_Places_and_Things"></a>People, Places, and Things</h3>
      
<dl>
        
<dt><b>Apache Logging Project Management Committee</b></dt>
        
<dd>The group of volunteers who are responsible for managing the Apache
          Logging Projects, including Log4j. This includes deciding what is distributed as
          products of the Apache Logging Project, maintaining the Project's
          shared resources, speaking on behalf of the Project, resolving license
          disputes regarding Apache products, nominating new PMC members or
          committers, and establishing these guidelines.</dd>
      </dl>
      
<p>Membership in the Apache Logging PMC is by invitation only and must be approved by
        consensus of the active Logging PMC members. A PMC member is considered
        inactive by their own declaration or by not contributing in any form to the
        project for over six months. An inactive member can become active again by
        reversing whichever condition made them inactive ( <i>i.e.</i> , by reversing
        their earlier declaration or by once again contributing toward the
        project's work). Membership can be revoked by a unanimous vote of all the
        active PMC members other than the member in question.</p>
      
<dl>
        
<dt><b>Apache Logging Committers</b></dt>
        
<dd>The group of volunteers who are responsible for the technical aspects
          of the Apache Logging Projects. This group has write access to the
          appropriate source repositories and these volunteers may cast binding
          votes on any technical discussion. Although a committer usually joins due to
          their activity on one of the Logging projects, they will have commit access to
          all Logging projects.</dd>
      </dl>
      
<p>Membership as a Committer is by invitation only and must be approved by
        consensus of the active Logging PMC members. A Committer is considered
        inactive by their own declaration or by not contributing in any form to the
        project for over six months. An inactive member can become active again by
        reversing whichever condition made them inactive ( <i>i.e.</i> , by reversing
        their earlier declaration or by once again contributing toward the
        project's work). Membership can be revoked by a unanimous vote of all the
        active PMC members (except the member in question if they are a PMC
        member).</p>
      
<dl>
        
<dt><b>Log4j Developers</b></dt>
        
<dd>All of the volunteers who are contributing time, code, documentation,
          or resources to the Log4j Project. A developer that makes sustained,
          welcome contributions to the project for over six months is usually
          invited to become a Committer, though the exact timing of such
          invitations depends on many factors.</dd>
        
<dt><b>mailing list</b></dt>
        
<dd>The Log4j developers' primary mailing list for discussion of issues
          and changes related to the project ( <i>dev@logging.apache.org</i> ).
          Subscription to the list is open, but only subscribers can post
          directly to the list.</dd>
        
<dt><b>private list</b></dt>
        
<dd>The Logging PMC's private mailing list for discussion of issues that
          are inappropriate for public discussion, such as legal, personal, or
          security issues prior to a published fix. Subscription to the list is
          only open (actually: mandatory) to Apache Logging's Project Management
          Committee.</dd>
        
<dt><b>Git</b></dt>
        
<dd>All of the Apache products are maintained in information
          repositories using either Subversion or Git; Log4j uses <a href="source-repository.html">Git</a>. Only some of the
          Apache developers have write access to the Apache Logging repositories; everyone
          has <a class="externalLink" href="https://git-wip-us.apache.org/repos/asf?p=logging-log4j2.git;a=summary">read access</a>.</dd>
      </dl>
      </div>
      <a name="issues"></a>
      
<div class="section">
<h3><a name="Issue_Management"></a>Issue Management</h3>
      
<p>The Log4j project uses the <a class="externalLink" href="https://issues.apache.org/jira/browse/LOG4J2">Jira</a> bug tracking
        system hosted and maintained by the Apache Software Foundation for tracking bugs and enhancements. The
        project roadmap may be maintained in JIRA through its RoadMap feature and through the use of
        Story or Epic issues.</p>
      
<p>Many issues will be encountered by the project, each resulting in zero or
        more proposed action items. Issues should be raised on the mailing list as
        soon as they are identified. Action items <b>must</b> be raised on the mailing
        list and added to JIRA using the appropriate issue type. All action items may be voted
        on, but not all of them will require a formal vote.</p>
      </div>
      <a name="voting"></a>
      
<div class="section">
<h3><a name="Voting"></a>Voting</h3>
      
<p>Any of the Log4j Developers may vote on any issue or action item. However,
        the only binding votes are those cast by active members of the Apache Logging
        PMC; if the vote is about a change to source code or documentation, the
        primary author of what is being changed may also cast a binding vote on
        that issue. All other votes are non-binding. All developers are encouraged
        to participate in decisions, but the decision itself is made by those who
        have been long-time contributors to the project. In other words, the Apache
        Log4j Project is a minimum-threshold meritocracy.</p>
      
<p>The act of voting carries certain obligations -- voting members are not
        only stating their opinion, they are agreeing to help do the work of the
        Log4j Project. Since we are all volunteers, members often become inactive
        for periods of time in order to take care of their &quot;real jobs&quot; or devote
        more time to other projects. It is therefore unlikely that the entire group
        membership will vote on every issue. To account for this, all voting
        decisions are based on a minimum quorum.</p>
      
<p>Each vote can be made in one of three flavors:</p>
      
<dl>
        
<dt><b>+1</b></dt>
        
<dd>Yes, agree, or the action should be performed. On some issues, this
          vote is only binding if the voter has tested the action on their own
          system(s).</dd>
        
<dt><b>&#xb1;0</b></dt>
        
<dd>Abstain, no opinion, or I am happy to let the other group members
          decide this issue. An abstention may have detrimental effects if too
          many people abstain.</dd>
        
<dt><b>-1</b></dt>
        
<dd>No. On issues where consensus is required, this vote counts as a
          <b>veto</b>. All vetoes must include an explanation of why the veto is
          appropriate. A veto with no explanation is void. No veto can be
          overruled. If you disagree with the veto, you should lobby the person
          who cast the veto. Voters intending to veto an action item should make
          their opinions known to the group immediately, so that the problem can
          be remedied as early as possible.</dd>
      </dl>
      
<p>An action item requiring <i>consensus approval</i> must receive at least <b>3
        binding +1</b> votes and <b>no vetoes</b>. An action item requiring <i>majority
        approval</i> must receive at least <b>3 binding +1</b> votes and more <b>+1</b>
        votes than <b>-1</b> votes ( <i>i.e.</i> , a majority with a minimum quorum of
        three positive votes). All other action items are considered to have <i>lazy
          approval</i> until someone votes <b>-1</b> , after which point they are decided
        by either consensus or a majority vote, depending upon the type of action
        item.</p>
      
<p>When appropriate, votes should be tallied in the JIRA issue. All votes must be either sent to
        the mailing list or added directly to the JIRA issue.</p>
      </div>
      <a name="types-of-action-items"></a>
      
<div class="section">
<h3><a name="Types_of_Action_Items"></a>Types of Action Items</h3>
      
<dl>
        
<dt><b>Long Term Plans</b></dt>
        
<dd>Long term plans are simply announcements that group members are
          working on particular issues related to the Log4j software. These are
          not voted on, but group members who do not agree with a particular
          plan, or think an alternate plan would be better, are obligated to
          inform the group of their feelings. In general, it is always better to
          hear about alternate plans <b>prior</b> to spending time on less adequate
          solutions.</dd>
        
<dt><b>Short Term Plans</b></dt>
        
<dd>Short term plans are announcements that a developer is working on a
          particular set of documentation or code files, with the implication
          that other developers should avoid them or try to coordinate their
          changes. This is a good way to proactively avoid conflict and possible
          duplication of work.</dd>
        
<dt><b>Release Plan</b></dt>
        
<dd>A release plan is used to keep all the developers aware of when a
          release is desired, who will be the release manager, when the
          repository will be frozen in order to create the release, and assorted
          other trivia to keep us from tripping over ourselves during the final
          moments. Lazy majority (at least 3 x +1 and more +1 than -1) decides
          each issue in the release plan.</dd>
        
<dt><b>Release Testing</b></dt>
        
<dd>After a new release is built it must be tested before being released to the public.
          Majority approval is required before the distribution can be publicly released.</dd>
        
<dt><b>Showstoppers/Blockers</b></dt>
        
<dd>Showstoppers are issues that require a fix be in place before the next
          public release. They are listed in Jira in order to focus
          special attention on the problem. An issue becomes a showstopper when
          it is listed as such in Jira and remains so by lazy consensus.</dd>
      </dl>
      
<p>All product changes to the currently active repository are subject to lazy
        consensus. All product changes to a prior-branch (old version) repository
        require consensus before the change is committed.</p>
      </div>
      <a name="when-to-commit-a-change"></a>
      
<div class="section">
<h3><a name="When_to_Commit_a_Change"></a>When to Commit a Change</h3>
      
<p>Ideas must be review-then-commit; patches can be commit-then-review. With a
        commit-then-review process, we trust that the developer doing the commit
        has a high degree of confidence in the change. Doubtful changes, new
        features, and large-scale overhauls need to be discussed before being
        committed to a repository. Any change that affects the semantics of
        arguments to configurable directives, significantly adds to the runtime
        size of the program, or changes the semantics of an existing API function
        must receive consensus approval on the mailing list before being committed.</p>
      
<p>Each developer is responsible for notifying the mailing list and adding an
        action item to Jira when they have an idea for a new feature or major
        change to propose for the product. The distributed nature of the Log4j
        project requires an advance notice of 48 hours in order to properly review
        a major change -- consensus approval of either the concept or a specific
        patch is required before the change can be committed. Note that a member
        might veto the concept (with an adequate explanation), but later rescind
        that veto if a specific patch satisfies their objections. No advance notice
        is required to commit singular bug fixes.</p>
      
<p>Related changes should be committed as a group, or very closely together.
        Half-completed projects should not be committed unless doing so is
        necessary to pass the baton to another developer who has agreed to complete
        the project in short order. All code changes must be successfully compiled
        and unit tests pass on the developer's platform before being committed.</p>
      
<p>The current source code tree should be capable of complete compilation at
        all times. However, it is sometimes impossible for a developer on one
        platform to avoid breaking some other platform when a change is committed,
        particularly when completing the change requires access to a special
        development tool on that other platform. If it is anticipated that a given
        change will break some other platform, the committer must indicate that in
        the commit log.</p>
      
<p>The committer is responsible for the quality of any third-party code or
        documentation they commit to the repository. All software committed to the
        repository must be covered by the Apache LICENSE or contain a copyright and
        license that allows redistribution under the same conditions as the Apache
        LICENSE.</p>
      
<p>A committed change must be reversed if it is vetoed by one of the voting
        members and the veto conditions cannot be immediately satisfied by the
        equivalent of a &quot;bug fix&quot; commit. The veto must be rescinded before the
        change can be included in any public release.</p>
      </div>
      <a name="changelogs"></a>
      
<div class="section">
<h3><a name="changes.xml_and_Git_logs"></a>changes.xml and Git logs</h3>
      
<p>Many code changes should be noted in the changes.xml file, and all should be
        documented in Git commit messages. Often the text of the Git
        log and the changes.xml entry are the same, but the distinct requirements
        sometimes result in different information.</p>
      </div>
<div class="section" id="subversion-log">
<h3 id="subversion-log">Git log</h3>
      
<p>The Git commit log message contains any information needed by</p>
      
<ul>
        
<li>
          
<p>fellow developers or other people researching source code changes/fixes</p>
        </li>
        
<li>
          
<p>end users (at least point out what the implications are for end users; it
            doesn't have to be in the most user friendly wording)</p>
        </li>
      </ul>
      
<p>If the code change was provided by a non-committer, attribute it using
        Submitted-by. If the change was committed verbatim, identify the
        committer(s) who reviewed it with Reviewed-by. If the change was committed
        with modifications, use the appropriate wording to document that, perhaps
        &quot;committed with changes&quot; if the person making the commit made the changes,
        or &quot;committed with contributions from xxxx&quot; if others made contributions to
        the code committed.</p>
      
<p>Example log message:</p>
        
<div>
<pre>
LOG4J2-9999
Check the return code from parsing the content length, to avoid a
crash if requests contain an invalid content length.
Submitted by: Jane Doe &lt;janedoe example.com&gt;
Reviewed by: susiecommitter
        </pre></div>
      </div>
<div class="section" id="changes">
<h3 id="changes">changes.xml</h3>
      
<p>changes.xml is the subset of the information that end users need to see when
        they upgrade from one release to the next:</p>
      
<ul>
        
<li>
          
<p>what can I now do that I couldn't do before</p>
        </li>
        
<li>
          
<p>what problems that we anticipate a user could have suffered from are now
            fixed</p>
        </li>
        
<li>
          
<p>all security fixes included, with CVE number. (If not available at the
            time of the commit, add later.)</p>
        </li>
      </ul>
      
<p>All entries in changes.xml should include the appropriate Jira issue number and should
        credit contributions made by non-committers by referencing them in the due-to attribute
        even if modifications needed to be made to the contribution.</p>
      
<p>The attribution for the change is anyone responsible for the code changes.</p>
      </div>
      <a name="committing-security-fixes"></a>
      
<div class="section">
<h3><a name="Committing_Security_Fixes"></a>Committing Security Fixes</h3>
      
<p>Open source projects, ASF or otherwise, have varying procedures for
        commits of vulnerability fixes.  One important aspect of these procedures
        is whether or not fixes to vulnerabilities can be committed to a
        repository with commit logs and possibly CHANGES entries which
        purposefully obscure the vulnerability and omit any available
        vulnerability tracking information.  The Apache HTTP Server project has
        decided that it is in the best interest of our users that the initial
        commit of such code changes to any branch will provide the best
        description available at that time as well as any available tracking
        information such as CVE number.  Committing of the fix will be delayed
        until the project determines that all of the information about the issue
        can be shared.</p>
      
<p>In some cases there are very real benefits to sharing code early even if
        full information about the issue cannot, including the potential for
        broader review, testing, and distribution of the fix. This is outweighed
        by the concern that sharing only the code changes allows skilled analysts
        to determine the impact and exploit mechanisms but does not allow the
        general user community to determine if preventative measures should be
        taken.</p>
      
<p>If a vulnerability is partially disclosed by committing a fix before the
        bug is determined to be exploitable, the httpd security team will decide
        on a case by case basis when to document the security implications and
        tracking number.</p>
      </div>
      <a name="patch"></a>
      
<div class="section">
<h3><a name="Patch_Format"></a>Patch Format</h3>
      
<p>When a specific change to the software is proposed for discussion or voting
        on the mailing list, it should be presented in the form of input to the
        patch command. When sent to the mailing list, the message should contain a
        Subject beginning with <tt>[PATCH]</tt> and a distinctive one-line summary
        corresponding to the action item for that patch. Afterwords, the patch
        summary in the STATUS file should be updated to point to the Message-ID of
        that message.</p>
      
<p>The patch should be created by using the <kbd>diff -u</kbd> command from
        the original software file(s) to the modified software file(s). E.g.,
        <tt>diff -u http_main.c.orig http_main.c &gt;&gt; patchfile.txt</tt>
        or
        <tt>svn diff http_main.c &gt;&gt; patchfile.txt</tt>
        All patches necessary to address an action item should be concatenated
        within a single patch message. If later modification of the patch proves
        necessary, the entire new patch should be posted and not just the
        difference between two patches. The STATUS file entry should then be
        updated to point to the new patch message.</p>
      
<p>The completed patchfile should produce no errors or prompts when the
        command,
        <tt>patch -s &lt; patchfile</tt>
        is issued in the target repository.</p>
      </div>
      <a name="teamwork"></a>
      
<div class="section">
<h3><a name="Teamwork"></a>Teamwork</h3>
        
<p>Open source projects function best when everyone is aware of the &quot;rules of the road&quot; and abide by them.</p>
        
<ol style="list-style-type: decimal">
          
<li>Error on the side of caution. If you don&#x2019;t understand it, don&#x2019;t touch it and ask on the list. If you think you
            understand it read it again or ask until you are sure you do. Nobody will blame you for asking questions.</li>
          
<li>Don&#x2019;t break the build - if there is the slightest chance the change you are making could cause unit test
            failures, run all unit tests.  Better yet, get in the habit of always running the unit tests before doing the commit.</li>
          
<li>If the build breaks and you have made recent changes then assume you broke it and try to fix it. Although it
            might not have been something you did it will make others feel a lot better than having to fix the mistake for
            you. Everyone makes mistakes. Taking responsibility for them is a good thing.</li>
          
<li>Don&#x2019;t change things to match your personal preference - the project has <a href="javastyle.html">style guidelines</a>
            that are validated with checkstyle, PMD, and other tools. If you aren&#x2019;t fixing a bug,
            fixing a problem identified by the tools, or fixing something specifically called out in these guidelines then
            start a discussion to see if the change is something the project wants before starting to work on it. We try to
            discuss things first and then implement the consensus reached in the discussion.</li>
          
<li>Along the same lines, do not commit automatic changes made by your IDE without reviewing them. There
            are a few places in the code that cannot conform to style guidelines without causing errors in some environments.
            These are clearly marked and must be left as is.</li>
        </ol>
      </div>
    </div>
  

            </td>
        </tr>
    </table>
</div>

<div class="footer">
        <p>Copyright &copy; 2016-2018 <a class="external" href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p>
    <p>Apache Logging, Apache Log4j, Log4j, Apache Log4j Audit, Log4j Audit, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p>
    <p>Site powered by <a class="external" href="http://getbootstrap.com/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p>
</div>
</div>
</body>
</html>
