<?xml version="1.0"?>
<!--
 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.

-->
<document xmlns="http://maven.apache.org/DOCUMENT/1.0.1"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/DOCUMENT/1.0.1 http://maven.apache.org/xsd/document-1.0.1.xsd"
          outputName="log4j-users-guide">

  <meta>
    <title>Apache Log4j 2</title>
    <author>The Apache Logging Project</author>
  </meta>

  <toc name="Table of Contents">
    <item name="Introduction" ref="/manual/index.xml"/>
    <item name="Architecture" ref="/manual/architecture.xml"/>
    <item name="Log4j 1.x Migration" ref="manual/migration.xml"/>
    <item name="API" ref="/manual/api.xml"/>
    <item name="Configuration" ref="/manual/configuration.xml.vm"/>
    <item name="Web Applications and JSPs" ref="/manual/webapp.xml"/>
    <item name="Plugins" ref="/manual/plugins.xml"/>
    <item name="Lookups" ref="/manual/lookups.xml"/>
    <item name="Appenders" ref="/manual/appenders.xml"/>
    <item name="Layouts" ref="/manual/layouts.xml.vm"/>
    <item name="Filters" ref="/manual/filters.xml"/>
    <item name="Async Loggers" ref="/manual/async.xml" />
    <item name="Garbage-free Logging" ref="/manual/garbagefree.xml"/>
    <item name="JMX" ref="/manual/jmx.xml.vm"/>
    <item name="Logging Separation" ref="/manual/logsep.xml"/>
    <item name="Extending Log4j" ref="/manual/extending.xml"/>
    <item name="Programmatic Log4j Configuration" ref="/manual/customconfig.xml"/>
    <item name="Custom Log Levels" ref="/manual/customloglevels.xml.vm" />
  </toc>

  <cover>
    <coverTitle>${project.name}</coverTitle>
    <coverSubTitle>v. ${project.version}</coverSubTitle>
    <coverType>User's Guide</coverType>
    <projectName>${project.name}</projectName>
    <projectLogo>http://logging.apache.org/log4j/2.x/images/logo.jpg</projectLogo>
    <companyName>The Apache Software Foundation</companyName>
    <companyLogo>http://www.apache.org/images/asf_logo_wide.png</companyLogo>
  </cover>
</document>