<!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-12-02 -->
<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 API &#x2013; Rat (Release Audit Tool) results - Log4j Audit API</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="20181202" />
                <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/log4j-audit/log4j-audit-api">Log4j Audit API &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://wiki.apache.org/logging" 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>
                    <li>
                                    <a href="../../index.html" title="Log4j Audit">Log4j Audit</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">
                                <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">Component Documentation</li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            <li class="collapsed">
                                <a href="project-info.html" title="Component Information">Component Information</a>
                                    </li>
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        <li class="expanded">
                                <a href="project-reports.html" title="Component Reports">Component Reports</a>
                                        <ul>
                    						                                    <li class="none">
                                <a href="jira-report.html" title="JIRA Report">JIRA Report</a>
                </li>
    											                                    <li class="none">
                                <a href="checkstyle.html" title="Checkstyle">Checkstyle</a>
                </li>
    											                                        <li class="none active">
                                <a href="rat-report.html" title="Rat Report">Rat Report</a>
                </li>
    											                                    <li class="none">
                                <a href="findbugs.html" title="FindBugs">FindBugs</a>
                </li>
    											                                    <li class="none">
                                <a href="xref/index.html" title="Source Xref">Source Xref</a>
                </li>
    											                                    <li class="none">
                                <a href="cpd.html" title="CPD">CPD</a>
                </li>
    											                                    <li class="none">
                                <a href="pmd.html" title="PMD">PMD</a>
                </li>
    					                </ul>
                        </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="dependencies.html" title="Dependencies">Dependencies</a>
                </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 active">
                                <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">
                <div class="section">
<h2><a name="Rat_Release_Audit_Tool_results"></a>Rat (Release Audit Tool) results</h2>
<p>The following document contains the results of <a class="externalLink" href="http://creadur.apache.org/rat/apache-rat-plugin/">Rat (Release Audit Tool)</a>.</p>
<p></p>
<div class="source">
<pre>
*****************************************************
Summary
-------
Generated at: 2018-12-02T17:01:36-07:00

Notes: 0
Binaries: 0
Archives: 1
Standards: 65

Apache Licensed: 61
Generated Documents: 0

JavaDocs are generated, thus a license header is optional.
Generated files do not require license headers.

4 Unknown Licenses

*****************************************************

Files with unapproved licenses:

  /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/basicCatalog.json
  /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java
  /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/BaseEventTest.java
  /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java

*****************************************************

Archives:

 + /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/catalog.zip
 
*****************************************************
  Files with Apache License headers will be marked AL
  Binary files (which do not require any license headers) will be marked B
  Compressed archives will be marked A
  Notices, licenses etc. will be marked N
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/pom.xml
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/testCatalog.json
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/InterfacesGeneratorContext.xml
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/log4j2-test.xml
 !????? /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/basicCatalog.json
  A     /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/catalog.zip
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/interfacesGenerator.properties
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/util/NamingUtilsTest.java
 !????? /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/TransferTest.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/catalog/CatalogManagerTest.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/catalog/StringCatalogReader.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/RequestContext.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/generator/TestInterfacesGenerator.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/AuditLoggerTest.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/RequestContextTest.java
 !????? /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/BaseEventTest.java
 !????? /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Transfer.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/site/markdown/index.md
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/site/site.xml
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/dto/AuditDto.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/LogEventFactory.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/util/StringUtil.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/util/JsonObjectMapperFactory.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/util/NamingUtils.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/layout/AuditLayout.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/AuditMessage.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/catalog/CatalogManagerImpl.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/catalog/CatalogManager.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/Local.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/Constraints.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/Required.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/RequestContextConstraints.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/ClientServer.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/RequestContext.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/ChainedSupplier.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/MaxLength.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/Chained.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/HeaderPrefix.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/annotation/Constraint.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/AuditExceptionHandler.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/ConstructorDefinition.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/Parameter.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/VariableDefinition.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/MethodDefinition.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/AccessorDefinition.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/InterfacesGenerator.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/ClassGenerator.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/generator/Constants.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/AuditEvent.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/RequestContextMappings.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/ChainedMapping.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/RequestContextMapping.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/LocalMapping.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/ClientServerMapping.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/request/Scope.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/ActivityLogger.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/exception/ConstraintValidationException.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/exception/AuditException.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHeaderInterceptor.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/ElapsedUtil.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextFilter.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/rest/RequestContextHandlerInterceptor.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/AbstractEventLogger.java
  AL    /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/main/java/org/apache/logging/log4j/audit/AuditLogger.java
 
*****************************************************

 Printing headers for text files without a valid license header...
 
=====================================================
== File: /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/resources/basicCatalog.json
=====================================================
{
  &quot;events&quot; : [ {
    &quot;name&quot; : &quot;login&quot;
  } ]
}

=====================================================
== File: /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/LoginTest.java
=====================================================
package org.apache.logging.log4j.audit;

import org.apache.logging.log4j.audit.event.Login;
import org.junit.Test;

import java.util.Collections;
import java.util.List;

import static org.junit.Assert.*;

public class LoginTest extends BaseEventTest {
    @Test
    public void testAuditClassToString() {
        Login event = LogEventFactory.getEvent(Login.class);
        event.setCompletionStatus(&quot;Success&quot;);
        String string = event.toString();

        assertEquals(&quot;[login completionStatus=\&quot;Success\&quot;]&quot;, string);
    }

    @Test
    public void testAuditClass() {
        Login event = LogEventFactory.getEvent(Login.class);

        event.logEvent();

        event.setCompletionStatus(&quot;Success&quot;);

        event.logEvent();

        AuditExceptionHandler exceptionHandler = (message, ex) -&gt; {

        };
        event.setAuditExceptionHandler(exceptionHandler);
        event.logEvent();

        List&lt;String&gt; msgs = app.getMessages();
        assertNotNull(&quot;No messages&quot;, msgs);
        assertEquals(&quot;No messages&quot;, 3, msgs.size());

        String msg = msgs.get(1);
        assertTrue(&quot;No completionStatus&quot;, msg.contains(&quot;completionStatus=\&quot;Success\&quot;&quot;));

        msg = msgs.get(2);
        assertFalse(&quot;auditExceptionHandler should not be present in the context&quot;, msg.contains(&quot;auditExceptionHandler=\&quot;&quot;));
        msgs.forEach(System.out::println);
    }

    @Test
    public void testAuditLog() {

=====================================================
== File: /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/BaseEventTest.java
=====================================================
package org.apache.logging.log4j.audit;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.ThreadContext;
import org.apache.logging.log4j.core.Appender;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.test.appender.ListAppender;
import org.junit.Before;
import org.junit.BeforeClass;

import java.util.Map;

import static org.junit.Assert.assertNotNull;

public class BaseEventTest {

    protected static LoggerContext ctx;
    protected static ListAppender app;

    @BeforeClass
    public static void setupClass() throws Exception {
        ctx = (LoggerContext) LogManager.getContext(false);
        Configuration config = ctx.getConfiguration();
        for (Map.Entry&lt;String, Appender&gt; entry : config.getAppenders().entrySet()) {
            if (entry.getKey().equals(&quot;List&quot;)) {
                app = (ListAppender) entry.getValue();
                break;
            }
        }
        assertNotNull(&quot;No Appender&quot;, app);
    }

    @Before
    public void before() {
        app.clear();
        ThreadContext.clearMap();
    }
}

=====================================================
== File: /Users/rgoers/projects/apache/logging/log4j/log4j-audit-1.0.1/log4j-audit/log4j-audit-api/src/test/java/org/apache/logging/log4j/audit/event/Login.java
=====================================================
package org.apache.logging.log4j.audit.event;

import org.apache.logging.log4j.audit.AuditEvent;

public interface Login extends AuditEvent {
}
</pre></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>
