Adding information on what is logging (#1)

diff --git a/content/charter.html b/content/charter.html
index 44331b4..22703dc 100644
--- a/content/charter.html
+++ b/content/charter.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/dormant.html b/content/dormant.html
index 97a6938..5ba890d 100644
--- a/content/dormant.html
+++ b/content/dormant.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/guidelines.html b/content/guidelines.html
index d97f453..3b0daa9 100644
--- a/content/guidelines.html
+++ b/content/guidelines.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/index.html b/content/index.html
index e31b6d5..19cfbeb 100644
--- a/content/index.html
+++ b/content/index.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/mailing-lists.html b/content/mailing-lists.html
index c46f9dc..c706022 100644
--- a/content/mailing-lists.html
+++ b/content/mailing-lists.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
@@ -81,7 +82,7 @@
 <p>These are the mailing lists that have been established for the Apache Logging Services project.</p>
 <p>For questions regarding individual logging projects, please find use the mailing lists defined<br />
 on the project site.</p>
-<h3><a href="&#109;&#x61;&#105;&#108;&#x74;o&#x3a;&#103;e&#x6e;&#x65;&#114;&#x61;&#x6c;&#64;&#108;&#x6f;g&#103;&#105;&#x6e;&#x67;&#x2e;&#x61;&#112;&#x61;&#99;h&#x65;&#x2e;&#x6f;&#114;g">g&#x65;n&#101;&#114;al&#64;&#x6c;&#x6f;&#x67;&#x67;&#105;&#110;&#x67;&#x2e;&#x61;&#x70;&#x61;c&#104;&#x65;&#x2e;&#111;&#114;&#x67;</a></h3>
+<h3><a href="&#109;a&#105;&#x6c;&#x74;&#x6f;&#x3a;&#103;&#x65;&#x6e;e&#114;&#x61;&#108;@&#108;&#111;&#103;g&#105;n&#x67;&#46;&#x61;&#x70;&#97;&#99;h&#x65;&#x2e;o&#114;&#x67;">&#x67;&#101;&#110;&#101;&#114;&#97;&#x6c;&#x40;&#108;&#111;&#103;&#103;&#x69;&#110;&#103;&#46;&#x61;&#112;&#97;&#x63;&#104;&#x65;&#x2e;&#x6f;&#x72;&#103;</a></h3>
 <p>General and public discussion related to the Logging project and it's children. Anyone may<br />
 subscribe; only subscribers may post.</p>
 <ul>
@@ -94,7 +95,7 @@
 <li><a href="http://mail-archives.apache.org/mod_mbox/logging-general/">Apache archive</a></li>
 <li><a href="http://markmail.org/search/?q=list%3Aorg.apache.logging.general">Markmail archive</a></li>
 </ul>
-<h3><a href="&#109;ai&#108;&#x74;o&#58;&#x64;&#101;&#x76;&#x40;&#x6c;&#111;g&#103;&#x69;&#x6e;&#103;&#x2e;ap&#97;c&#x68;&#101;&#x2e;&#x6f;&#x72;g">&#100;e&#x76;&#x40;&#108;&#x6f;&#103;&#x67;&#x69;&#x6e;&#103;.&#97;&#x70;&#97;&#x63;&#104;e&#x2e;&#x6f;r&#103;</a></h3>
+<h3><a href="&#x6d;&#97;&#105;l&#116;&#x6f;&#x3a;d&#x65;&#118;&#64;&#108;&#x6f;&#103;g&#x69;&#110;&#103;&#x2e;&#97;&#x70;&#97;&#99;&#104;&#x65;&#x2e;&#x6f;&#114;&#103;">&#100;&#x65;&#x76;&#64;&#108;o&#x67;g&#105;&#110;g&#x2e;&#x61;&#x70;&#97;&#99;h&#101;&#46;&#x6f;r&#103;</a></h3>
 <p>All logging projects share a common mailing list where development of each project is discussed.<br />
 Please use subject tags like [log4j] when starting a new thread.</p>
 <ul>
@@ -107,7 +108,7 @@
 <li><a href="http://mail-archives.apache.org/mod_mbox/logging-dev/">Apache archive</a></li>
 <li><a href="http://markmail.org/search/?q=list%3Aorg.apache.logging.dev">Markmail archive</a></li>
 </ul>
-<h3><a href="&#109;&#x61;&#105;lt&#x6f;:c&#x6f;&#x6d;&#109;&#105;t&#115;&#64;l&#x6f;g&#x67;&#x69;&#110;&#x67;&#x2e;&#x61;p&#x61;&#x63;&#104;&#x65;.&#111;&#114;&#103;">&#99;&#x6f;&#109;&#109;&#x69;&#x74;&#x73;@&#x6c;&#111;&#103;&#103;&#105;&#x6e;&#103;.&#x61;&#x70;ac&#x68;&#x65;.&#x6f;&#x72;g</a></h3>
+<h3><a href="&#109;&#97;&#x69;&#108;t&#111;:co&#109;&#x6d;&#x69;&#x74;s&#x40;lo&#103;&#103;&#105;&#110;g&#46;&#97;&#112;&#x61;&#x63;&#x68;&#x65;&#46;&#111;r&#x67;">&#99;o&#x6d;&#x6d;i&#116;&#115;&#64;l&#111;&#x67;g&#x69;&#x6e;g.a&#x70;&#x61;&#99;h&#101;&#x2e;&#111;&#114;&#x67;</a></h3>
 <p>When changes are made to the source code repository, the commit messages are automatically sent to<br />
 this list. Anyone may subscribe; posting is not allowed. The Reply-To is set to the<br />
 logging-general list, so if you reply to a message that's where your reply is going to end up.</p>
@@ -120,7 +121,7 @@
 <li><a href="http://mail-archives.apache.org/mod_mbox/logging-commits/">Apache archive</a></li>
 <li><a href="http://markmail.org/search/?q=list%3Aorg.apache.logging.commits">Markmail archive</a></li>
 </ul>
-<h3><a href="&#109;&#97;&#105;&#108;&#116;&#x6f;&#58;&#112;&#114;&#105;&#118;&#x61;&#116;&#x65;&#64;&#108;&#111;g&#x67;&#x69;&#110;&#x67;&#x2e;&#97;&#112;&#x61;&#x63;he&#x2e;&#x6f;r&#x67;">&#112;&#x72;i&#118;&#97;&#116;&#x65;&#64;&#108;o&#x67;&#x67;i&#110;&#103;.&#97;p&#97;&#x63;&#104;&#x65;&#46;&#x6f;&#114;&#103;</a></h3>
+<h3><a href="m&#97;&#105;&#x6c;&#x74;o&#58;&#x70;&#114;&#x69;v&#97;te&#64;&#x6c;&#x6f;g&#x67;&#x69;&#110;&#x67;.&#97;p&#x61;&#99;he&#46;o&#x72;&#103;">p&#x72;&#105;&#x76;&#97;te@l&#x6f;&#103;&#103;i&#110;g&#46;&#97;&#x70;&#97;&#99;&#x68;&#x65;&#x2e;&#111;&#114;&#103;</a></h3>
 <p>Private list for the project management committee. It is not open to public subscription. This list should be used<br />
 only for the discussion of confidential topics. As much business as possible should be conducted in public on<br />
 the general list.</p>
diff --git a/content/privacy-policy.html b/content/privacy-policy.html
index 73fa2d4..63b4da1 100644
--- a/content/privacy-policy.html
+++ b/content/privacy-policy.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/security.html b/content/security.html
index 7775227..52d8dc9 100644
--- a/content/security.html
+++ b/content/security.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/team-list.html b/content/team-list.html
index 2a9d252..27735fd 100644
--- a/content/team-list.html
+++ b/content/team-list.html
@@ -28,6 +28,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>
diff --git a/content/what-is-logging.html b/content/what-is-logging.html
new file mode 100644
index 0000000..4924bed
--- /dev/null
+++ b/content/what-is-logging.html
@@ -0,0 +1,307 @@
+<!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>
+
+</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><a target="_blank" href="what-is-logging.html">What is logging?</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">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">Apache log4net</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>
+                        <li><a target="_blank" href="log4php">Apache log4php</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>
+                        <li><a target="_blank" href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy</a></li>
+                    </ul>
+                </li>
+            </ul>
+        </div>
+    </div>
+</div>
+
+<div class="container">
+    <div class="content">
+        <h1>What is logging?</h1>
+<p>At a high level, logging is used to capture information during the run of an<br />
+application.  This can include different types of information about both the<br />
+state of the application and inputs to the application.  For example, an HTTP<br />
+server may log information about incoming connections(such as an IP address).<br />
+Logging can also be at different levels of verbosity, in order to allow a user<br />
+of the application to not be overwhelmed with too much information.</p>
+<p>Logging can be broadly classified into two categories.  The two main categories<br />
+of logging are debug logging and audit logging.  Debug logging is generally<br />
+useful for application developers who can turn on messages that an end-user<br />
+does not care about - for example, if data is being parsed correctly, or if an<br />
+exception is thrown.  Audit logging is more interesting to system<br />
+administrators.  This type of data would include information such as when<br />
+somebody logged in, who changed a piece of information, etc.  Debug logging and<br />
+audit logging are not mutually exclusive, and there can be plenty of overlap<br />
+between these two categories.</p>
+<h1>What should a logging framework do?</h1>
+<p>At a minimum, a logging framework needs to be able to do the following:</p>
+<ul>
+<li>Easily allow you to create log messages</li>
+<li>Send log messages to stdout and/or stderr</li>
+<li>Be completely transparent to your application - your application should<br />
+behave exactly the same no matter if logging is enabled or disabled</li>
+</ul>
+<p>However, a logging framework that does only these things is not particularly<br />
+useful, and no better than using System.out.println() or printf().  Common<br />
+features of logging frameworks generally include:</p>
+<ul>
+<li>Ability to send log messages to other places than just stdout/stderr.  For<br />
+example, common places to send logs could be:<br />
+** syslog<br />
+** A file on the local filesystem<br />
+** Remote log server(e.g. ELK, Splunk, kibana, etc.)<br />
+** Windows event log<br />
+** Database</li>
+<li>Filtering based off of levels and data</li>
+<li>Location information of where the log statement is in the code</li>
+<li>Allow for rotation of files when logging to a file.  This allows you to do<br />
+things such as creating a new log whenever you start up, doing one log file per<br />
+day, limiting files to a specific size, etc.</li>
+<li>Log to multiple locations at once(send the same data to stdout and a file for<br />
+example)</li>
+<li>Classify messages based off of the particular subsystem that they are from</li>
+<li>Format log messages according to some user-defined pattern</li>
+</ul>
+<p>This is not an exhaustive list of all features that could exist.  There are<br />
+many different logging frameworks that exist which may implement different<br />
+subsets of these features, and may also have more features than are listed here.</p>
+<h1>Log Levels and Subsystem Classification</h1>
+<p>When you are logging information, two of the most important things to know are<br />
+the level of the log message and the subsystem that the log message is from.<br />
+This allows you to determine how severe something is, as well as where it is<br />
+coming from.</p>
+<p>The traditional log levels are as follows(from most verbose to least verbose):<br />
+TRACE<br />
+DEBUG<br />
+INFO<br />
+WARN<br />
+ERROR</p>
+<p>In addition, levels of CRITICAL and FATAL may exist as well.  Generally, FATAL<br />
+indicates that the application is about to exit, while CRITICAL is similar to<br />
+ERROR.</p>
+<p>Levels make it easy to quickly filter messages.  Since more verbose messages<br />
+still allow less verbose messages to be printed, you don't lose information by<br />
+turning the verbosity up.  When you are working on a particular subsystem, you<br />
+may want that subsystem to be at the DEBUG level to see all the messages, or<br />
+TRACE if there is something that you really need to see.  As a general rule of<br />
+thumb, when your application is in production the default level of all loggers<br />
+should be at the INFO level.</p>
+<p>Subsystems help to classify the data as well.  In Java, this is generally done<br />
+by the package that a class is in.  Being able to set a particular subsystem<br />
+that you are debugging to the DEBUG level(and not just a single class) is an<br />
+important part of being able to easily filter information and to not overload<br />
+the programmer who is debugging the application.</p>
+<p>Within the Apache Logging Services projects(log4j2, log4cxx, and log4net) this<br />
+subsystem classification follows the Java hierarchical approach.  If you have a<br />
+logger org.apache.Foo and org.apache.Bar, you can set the level of org.apache<br />
+to DEBUG and both loggers will be at the DEBUG level, but can also be<br />
+individually set if required.  This hierarchical way of logging is not a<br />
+feature that all logging frameworks have, however it is very useful if your<br />
+code is organized in a way such that all classes have individual loggers and<br />
+are logically separated into subsystems appropriately.  This also allows for<br />
+more granular control over your debug statements.</p>
+<h1>Where to put logs?</h1>
+<p>Logging to different locations(sometimes called sinks) is an important part of<br />
+logging frameworks.  For simple applications, you may not need to do anything<br />
+more complicated than just send data to stdout and/or a file.  However, more<br />
+complicated applications quickly need to have more flexibility in how and where<br />
+they log information.  Modern applications can log to web-based log aggregators<br />
+in addition to a local log mechanism such as syslog.</p>
+<p>By configuring these log locations through an external source such as a config<br />
+file, it also makes it possible for the end-user to configure the system for<br />
+their particular use-case.</p>
+<h1>Transparent Logging</h1>
+<p>One of the most basic tenets of logging is that it needs to be completely<br />
+transparent to your application.  Your application must not care if logging is<br />
+enabled or disabled: all it does is send messages to the logging framework,<br />
+which then handles all of the filtering and routing required to get the message<br />
+to its final destination.  This also makes it possible to write unit tests that<br />
+don't care about logging at all.  If the logging system is not initialized, the<br />
+worst that should happen is that nothing gets logged.</p>
+<h1>How to do proper logging</h1>
+<p>Now that we understand what the normal features of logging libraries are,<br />
+it’s time to talk about how to do proper logging.  As we’ve mentioned<br />
+before, the two main things to worry about when logging are what the level of<br />
+the message is, and the classification of the log message.  For the<br />
+classification of the log message, this will often be the name of the class<br />
+that is doing the logging.  Assuming that you have a good design already, then<br />
+the classification derives clearly from the name of the class and the<br />
+package/namespace the class is in.</p>
+<p>Choosing the level of the log message can be a bit trickier.  A good rule of<br />
+thumb is to leave your log messages at INFO level during normal operation, so<br />
+what should we put at that level and what should be more verbose?  Let’s<br />
+assume that we are opening a network socket for remote communications.  At the<br />
+INFO level we may inform that the network subsystem is starting up and ready<br />
+for work.  DEBUG information could include new connections from clients with<br />
+their IP/port combination, while TRACE information could be output whenever a<br />
+packet comes in from a client.  In addition, we may have ERROR messages if we<br />
+are unable to open a socket for reading/writing.</p>
+<p>By having different pieces of the data flow at different log levels, it makes<br />
+it easy to quickly look at the logs and determine how serious a problem is and<br />
+what the system is doing during operation.</p>
+<h1>Other things to worry about when logging</h1>
+<p>As we have seen, having a good logging framework is critical to being able to<br />
+find and fix errors in applications.  However, just because we have logging<br />
+doesn’t mean that it is infallible.  Since logging code that you insert into<br />
+your application is still code that you have written, it is always possible<br />
+that the log messages you get out are lying to you due to a bug in a log<br />
+statement.</p>
+<h1>Features that the Apache Logging Services projects have</h1>
+<p>While there are many different logging frameworks that exist for Java, C++, and<br />
+.NET, there are a number of built-in features that Log4j2, Log4cxx, and Log4net<br />
+have that are generally useful.</p>
+<h2>Hierarchichal Logging</h2>
+<p>As mentioned previously, hierarchical logging allows for easy grouping of<br />
+subsystem information.  This allows you to have fine-grained control over the<br />
+information that you are logging and easily allows for one logger per-class.</p>
+<p>This hierarchical logging also means that you don't need to explicitly share<br />
+a sink between loggers.  While it is possible to configure Log4j2 and Log4cxx<br />
+to send each logger to a separate location, the parent/child relationship means<br />
+that children will log their messages to any sinks that their parents have.</p>
+<h2>Location Information</h2>
+<p>Knowing exactly where a log statement is can be vital in order to track down<br />
+the location of a log statement.  Both Log4j2 and Log4cxx are able to determine<br />
+the filename, class name, method name, and line number where the log message<br />
+is coming from.  With Log4cxx, this is able to be done at compile-time.</p>
+<h2>Static and Single-instance Loggers</h2>
+<p>All loggers that are created with Log4j2 and Log4cxx are able to be declared<br />
+as static variables in your source file, eliminating the need for a dedicated<br />
+instance variable of a logger per-class.  A side effect of this is that there<br />
+is a global logger registry, so that you can access the same logger via a<br />
+static LogManager in different classes without having to pass the logger around.</p>
+<h2>Nested and Mapped Diagnostic Contexts</h2>
+<p>When you have multiple objects of the same type, using a static logger can be<br />
+problematic when you need to only view data for one instance of the class.  By<br />
+providing a Nested Diagnostic Context and a Mapped Diagnostic Context, it is<br />
+possible to add context information to your log statements.</p>
+<h2>Flexible Log Message Formatting</h2>
+<p>When sending a log message to a flat text file, it is often desirable to have<br />
+the messages in a simple to understand format.  This information can include<br />
+data such as the date/time of the log message, the level of the message, the<br />
+logger that produced the message, and the message itself.  With the Log4j2<br />
+and Log4cxx PatternLayout classes, it is possible to quickly configure the<br />
+logging system to output information in a convenient format.</p>
+<p>Different types of log message formatting is also important when you need<br />
+to send messages to different locations.  The code that creates the log messages<br />
+should not know anything about how the message is formatted on the backend.<br />
+This allows for the same log message to be formatted in different ways with<br />
+potentially different metadata - for example, JSON format for a log aggregating<br />
+service, or plain text for a local configuration file.</p>
+<h2>Configuration via config file</h2>
+<p>Both Log4j2 and Log4cxx can be configured with a configuration file in one of<br />
+several different formats.  While it is always possible to configure via code,<br />
+configuration files make it easy to reconfigure the system without having to<br />
+recompile your code.  This also means it is possible to edit a configuration<br />
+file and dynamically change the configuration at runtime.  For example, you<br />
+can turn on a logger that was previously off if you are debugging a live<br />
+system.</p>
+<h2>Garbage-free(Log4j2)</h2>
+<p>In Java, it is important to reduce the amount of time that the garbage<br />
+collector takes to run.  By not allocating and freeing objects, your<br />
+log statements will add very little to the runtime overhead of your application.</p>
+<h2>Formatting with replacements</h2>
+<p>When creating a log statement, it is often slow and annoying to perform string<br />
+concatenation to create a log statement.  In Java, the simplest way to<br />
+concatenate a string is to simply use the + operator:</p>
+<pre><code>log(&quot;Logging information: &quot; + someVariable + &quot; and the other variable is &quot; + otherVariable);
+</code></pre>
+<p>While in C++, you can get into a chevron overload:</p>
+<pre><code>log(&quot;Logging information: &quot; &lt;&lt; someVariable &lt;&lt; &quot; and the other variable is &quot; &lt;&lt; otherVariable);
+</code></pre>
+<p>Both Log4j2 and Log4cxx allow for variable replacements in strings, such that<br />
+the above log statements can both be written similar to the following:</p>
+<pre><code>log(&quot;Logging information: {} and the other variable is {}&quot;, someVariable, otherVariable);
+</code></pre>
+<h2>Filtering</h2>
+<p>When you have many different log messages that you are trying to make sense of,<br />
+it can be difficult to focus on the correct piece of information.  Because of<br />
+this, it is possible to configure both Log4j2 and Log4cxx to filter certain<br />
+messages based off of various attributes, such as a text string that is contained<br />
+within the log message.  Since these filters are also able to be configured<br />
+through the confgiuration file, adding or removing filters is a simple operation.</p>
+<h1>Conclusion</h1>
+<p>Logging is a rather complicated topic that covers many different aspects.  While<br />
+different applications will have different requirements for their log statements,<br />
+the projects of the Apache Logging Services Commitee provide a generic and<br />
+widely applicable implemenation of logging for all kinds of applications.</p>
+
+    </div>
+
+<div class="footer">
+        <p>
+            Copyright © 2017-2022 <a href="https://www.apache.org" target="external">The Apache Software Foundation</a>.
+            Licensed under the <a href="https://www.apache.org/licenses/LICENSE-2.0"
+            target="external">Apache Software License, Version 2.0</a> Please read our <a href="https://privacy.apache.org/policies/privacy-policy-public.html">privacy policy</a>.
+        </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>
diff --git a/sources/src/main/jbake/content/what-is-logging.md b/sources/src/main/jbake/content/what-is-logging.md
new file mode 100644
index 0000000..994b80a
--- /dev/null
+++ b/sources/src/main/jbake/content/what-is-logging.md
@@ -0,0 +1,249 @@
+title=What is logging?
+status=published
+type=page
+~~~~~~
+
+# What is logging?
+At a high level, logging is used to capture information during the run of an
+application.  This can include different types of information about both the
+state of the application and inputs to the application.  For example, an HTTP 
+server may log information about incoming connections(such as an IP address).  
+Logging can also be at different levels of verbosity, in order to allow a user 
+of the application to not be overwhelmed with too much information.
+
+Logging can be broadly classified into two categories.  The two main categories 
+of logging are debug logging and audit logging.  Debug logging is generally 
+useful for application developers who can turn on messages that an end-user 
+does not care about - for example, if data is being parsed correctly, or if an 
+exception is thrown.  Audit logging is more interesting to system 
+administrators.  This type of data would include information such as when 
+somebody logged in, who changed a piece of information, etc.  Debug logging and 
+audit logging are not mutually exclusive, and there can be plenty of overlap 
+between these two categories.
+
+# What should a logging framework do?
+At a minimum, a logging framework needs to be able to do the following:
+
+* Easily allow you to create log messages
+* Send log messages to stdout and/or stderr
+* Be completely transparent to your application - your application should 
+behave exactly the same no matter if logging is enabled or disabled
+
+However, a logging framework that does only these things is not particularly 
+useful, and no better than using System.out.println() or printf().  Common 
+features of logging frameworks generally include:
+
+* Ability to send log messages to other places than just stdout/stderr.  For 
+example, common places to send logs could be:
+** syslog
+** A file on the local filesystem
+** Remote log server(e.g. ELK, Splunk, kibana, etc.)
+** Windows event log
+** Database
+* Filtering based off of levels and data
+* Location information of where the log statement is in the code
+* Allow for rotation of files when logging to a file.  This allows you to do 
+things such as creating a new log whenever you start up, doing one log file per 
+day, limiting files to a specific size, etc.
+* Log to multiple locations at once(send the same data to stdout and a file for 
+example)
+* Classify messages based off of the particular subsystem that they are from
+* Format log messages according to some user-defined pattern
+
+This is not an exhaustive list of all features that could exist.  There are 
+many different logging frameworks that exist which may implement different 
+subsets of these features, and may also have more features than are listed here.
+
+# Log Levels and Subsystem Classification
+When you are logging information, two of the most important things to know are 
+the level of the log message and the subsystem that the log message is from.  
+This allows you to determine how severe something is, as well as where it is 
+coming from.
+
+The traditional log levels are as follows(from most verbose to least verbose):
+TRACE
+DEBUG
+INFO
+WARN
+ERROR
+
+In addition, levels of CRITICAL and FATAL may exist as well.  Generally, FATAL 
+indicates that the application is about to exit, while CRITICAL is similar to 
+ERROR.
+
+Levels make it easy to quickly filter messages.  Since more verbose messages 
+still allow less verbose messages to be printed, you don't lose information by 
+turning the verbosity up.  When you are working on a particular subsystem, you 
+may want that subsystem to be at the DEBUG level to see all the messages, or 
+TRACE if there is something that you really need to see.  As a general rule of 
+thumb, when your application is in production the default level of all loggers 
+should be at the INFO level.
+
+Subsystems help to classify the data as well.  In Java, this is generally done 
+by the package that a class is in.  Being able to set a particular subsystem 
+that you are debugging to the DEBUG level(and not just a single class) is an 
+important part of being able to easily filter information and to not overload 
+the programmer who is debugging the application.
+
+Within the Apache Logging Services projects(log4j2, log4cxx, and log4net) this 
+subsystem classification follows the Java hierarchical approach.  If you have a 
+logger org.apache.Foo and org.apache.Bar, you can set the level of org.apache 
+to DEBUG and both loggers will be at the DEBUG level, but can also be 
+individually set if required.  This hierarchical way of logging is not a 
+feature that all logging frameworks have, however it is very useful if your 
+code is organized in a way such that all classes have individual loggers and 
+are logically separated into subsystems appropriately.  This also allows for 
+more granular control over your debug statements.
+
+# Where to put logs?
+Logging to different locations(sometimes called sinks) is an important part of 
+logging frameworks.  For simple applications, you may not need to do anything 
+more complicated than just send data to stdout and/or a file.  However, more 
+complicated applications quickly need to have more flexibility in how and where 
+they log information.  Modern applications can log to web-based log aggregators 
+in addition to a local log mechanism such as syslog.
+
+By configuring these log locations through an external source such as a config 
+file, it also makes it possible for the end-user to configure the system for 
+their particular use-case.
+
+# Transparent Logging
+One of the most basic tenets of logging is that it needs to be completely 
+transparent to your application.  Your application must not care if logging is 
+enabled or disabled: all it does is send messages to the logging framework, 
+which then handles all of the filtering and routing required to get the message 
+to its final destination.  This also makes it possible to write unit tests that 
+don't care about logging at all.  If the logging system is not initialized, the 
+worst that should happen is that nothing gets logged.
+
+# How to do proper logging
+Now that we understand what the normal features of logging libraries are, 
+it’s time to talk about how to do proper logging.  As we’ve mentioned 
+before, the two main things to worry about when logging are what the level of 
+the message is, and the classification of the log message.  For the 
+classification of the log message, this will often be the name of the class 
+that is doing the logging.  Assuming that you have a good design already, then 
+the classification derives clearly from the name of the class and the 
+package/namespace the class is in.
+
+Choosing the level of the log message can be a bit trickier.  A good rule of 
+thumb is to leave your log messages at INFO level during normal operation, so 
+what should we put at that level and what should be more verbose?  Let’s 
+assume that we are opening a network socket for remote communications.  At the 
+INFO level we may inform that the network subsystem is starting up and ready 
+for work.  DEBUG information could include new connections from clients with 
+their IP/port combination, while TRACE information could be output whenever a 
+packet comes in from a client.  In addition, we may have ERROR messages if we 
+are unable to open a socket for reading/writing.
+
+By having different pieces of the data flow at different log levels, it makes 
+it easy to quickly look at the logs and determine how serious a problem is and 
+what the system is doing during operation.
+
+# Other things to worry about when logging
+As we have seen, having a good logging framework is critical to being able to 
+find and fix errors in applications.  However, just because we have logging 
+doesn’t mean that it is infallible.  Since logging code that you insert into 
+your application is still code that you have written, it is always possible 
+that the log messages you get out are lying to you due to a bug in a log 
+statement.  
+
+# Features that the Apache Logging Services projects have
+While there are many different logging frameworks that exist for Java, C++, and
+.NET, there are a number of built-in features that Log4j2, Log4cxx, and Log4net
+have that are generally useful.
+
+## Hierarchichal Logging
+As mentioned previously, hierarchical logging allows for easy grouping of
+subsystem information.  This allows you to have fine-grained control over the
+information that you are logging and easily allows for one logger per-class.
+
+This hierarchical logging also means that you don't need to explicitly share
+a sink between loggers.  While it is possible to configure Log4j2 and Log4cxx
+to send each logger to a separate location, the parent/child relationship means
+that children will log their messages to any sinks that their parents have.
+
+## Location Information
+Knowing exactly where a log statement is can be vital in order to track down
+the location of a log statement.  Both Log4j2 and Log4cxx are able to determine
+the filename, class name, method name, and line number where the log message
+is coming from.  With Log4cxx, this is able to be done at compile-time.
+
+## Static and Single-instance Loggers
+All loggers that are created with Log4j2 and Log4cxx are able to be declared
+as static variables in your source file, eliminating the need for a dedicated
+instance variable of a logger per-class.  A side effect of this is that there
+is a global logger registry, so that you can access the same logger via a
+static LogManager in different classes without having to pass the logger around.
+
+## Nested and Mapped Diagnostic Contexts
+When you have multiple objects of the same type, using a static logger can be
+problematic when you need to only view data for one instance of the class.  By
+providing a Nested Diagnostic Context and a Mapped Diagnostic Context, it is
+possible to add context information to your log statements.
+
+## Flexible Log Message Formatting
+When sending a log message to a flat text file, it is often desirable to have
+the messages in a simple to understand format.  This information can include
+data such as the date/time of the log message, the level of the message, the
+logger that produced the message, and the message itself.  With the Log4j2
+and Log4cxx PatternLayout classes, it is possible to quickly configure the
+logging system to output information in a convenient format.
+
+Different types of log message formatting is also important when you need
+to send messages to different locations.  The code that creates the log messages
+should not know anything about how the message is formatted on the backend.
+This allows for the same log message to be formatted in different ways with
+potentially different metadata - for example, JSON format for a log aggregating
+service, or plain text for a local configuration file.
+
+## Configuration via config file
+Both Log4j2 and Log4cxx can be configured with a configuration file in one of
+several different formats.  While it is always possible to configure via code,
+configuration files make it easy to reconfigure the system without having to
+recompile your code.  This also means it is possible to edit a configuration
+file and dynamically change the configuration at runtime.  For example, you
+can turn on a logger that was previously off if you are debugging a live
+system.
+
+## Garbage-free(Log4j2)
+In Java, it is important to reduce the amount of time that the garbage
+collector takes to run.  By not allocating and freeing objects, your
+log statements will add very little to the runtime overhead of your application.
+
+## Formatting with replacements
+When creating a log statement, it is often slow and annoying to perform string
+concatenation to create a log statement.  In Java, the simplest way to
+concatenate a string is to simply use the + operator:
+
+```
+log("Logging information: " + someVariable + " and the other variable is " + otherVariable);
+```
+
+While in C++, you can get into a chevron overload:
+
+```
+log("Logging information: " << someVariable << " and the other variable is " << otherVariable);
+```
+
+Both Log4j2 and Log4cxx allow for variable replacements in strings, such that
+the above log statements can both be written similar to the following:
+
+```
+log("Logging information: {} and the other variable is {}", someVariable, otherVariable);
+```
+
+## Filtering
+When you have many different log messages that you are trying to make sense of,
+it can be difficult to focus on the correct piece of information.  Because of
+this, it is possible to configure both Log4j2 and Log4cxx to filter certain
+messages based off of various attributes, such as a text string that is contained
+within the log message.  Since these filters are also able to be configured
+through the confgiuration file, adding or removing filters is a simple operation.
+
+# Conclusion
+Logging is a rather complicated topic that covers many different aspects.  While
+different applications will have different requirements for their log statements,
+the projects of the Apache Logging Services Commitee provide a generic and
+widely applicable implemenation of logging for all kinds of applications.
+
diff --git a/sources/src/main/jbake/templates/navbar.ftl b/sources/src/main/jbake/templates/navbar.ftl
index b9755d0..39b8e8a 100644
--- a/sources/src/main/jbake/templates/navbar.ftl
+++ b/sources/src/main/jbake/templates/navbar.ftl
@@ -11,6 +11,7 @@
                         <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><a target="_blank" href="what-is-logging.html">What is logging?</a>
                         </li>
                     </ul>
                 </li>