Initial conversion to markdown for use with Doxygen
diff --git a/src/site/apt/index.apt b/src/site/apt/index.apt
deleted file mode 100644
index 4eb49dd..0000000
--- a/src/site/apt/index.apt
+++ /dev/null
@@ -1,45 +0,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.
- ------
-Short introduction to Apache log4cxx
- ------
- ------
- ------
-
-Short introduction to Apache log4cxx
-
-	Apache log4cxx is a logging framework for C++ patterned after
-	{{{https://logging.apache.org/log4j}Apache log4j}}, which uses
-	{{{https://apr.apache.org}Apache Portable Runtime}} for most platform-specific code and should
-	be usable on any platform supported by APR. Apache log4cxx is licensed under the
-	{{{https://www.apache.org/licenses}Apache License}}, an open source license certified by the
-	{{{https://www.opensource.org}Open Source Initiative}}.
-
-	Almost every large application includes its own logging or tracing API. Inserting log
-	statements into code is a low-tech method for debugging it. It may also be the only way because
-	debuggers are not always available or applicable. This is usually the case for multithreaded
-	applications and distributed applications at large.
-
-	Experience indicates that logging is an important component of the development cycle. It offers
-	several advantages. It provides precise context about a run of the application. Once inserted
-	into the code, the generation of logging output requires no human intervention. Moreover, log
-	output can be saved in persistent medium to be studied at a later time. In addition to its use
-	in the development cycle, a sufficiently rich logging package can also be viewed as an auditing
-	tool.
-
-	Logging does have its drawbacks. It can slow down an application. If too verbose, it can cause
-	scrolling blindness. To alleviate these concerns, log4cxx is designed to be reliable, fast and
-	extensible. Since logging is rarely the main focus of an application, the log4cxx API strives
-	to be simple to understand and to use.
diff --git a/src/site/doxy/Doxyfile.in b/src/site/doxy/Doxyfile.in
index 37c21f4..deff235 100644
--- a/src/site/doxy/Doxyfile.in
+++ b/src/site/doxy/Doxyfile.in
@@ -13,7 +13,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-# Doxyfile 1.8.6
+# Doxyfile 1.8.13
 
 # This file describes the settings to be used by the documentation system
 # doxygen (www.doxygen.org) for a project.
@@ -61,10 +61,10 @@
 
 PROJECT_BRIEF          =
 
-# With the PROJECT_LOGO tag one can specify an logo or icon that is included in
-# the documentation. The maximum height of the logo should not exceed 55 pixels
-# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo
-# to the output directory.
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
 
 PROJECT_LOGO           =
 
@@ -73,9 +73,9 @@
 # entered, it will be relative to the location where doxygen was started. If
 # left blank the current directory will be used.
 
-OUTPUT_DIRECTORY       = .
+OUTPUT_DIRECTORY       =
 
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub-
+# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub-
 # directories (in 2 levels) under the output directory of each output format and
 # will distribute the generated files over these directories. Enabling this
 # option can be useful when feeding doxygen a huge amount of source files, where
@@ -85,6 +85,14 @@
 
 CREATE_SUBDIRS         = NO
 
+# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
 # The OUTPUT_LANGUAGE tag is used to specify the language in which all
 # documentation generated by doxygen is written. Doxygen will use this
 # information to generate all constant output in the proper language.
@@ -100,14 +108,14 @@
 
 OUTPUT_LANGUAGE        = English
 
-# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member
+# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member
 # descriptions after the members that are listed in the file and class
 # documentation (similar to Javadoc). Set to NO to disable this.
 # The default value is: YES.
 
 BRIEF_MEMBER_DESC      = YES
 
-# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief
+# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief
 # description of a member or function before the detailed description
 #
 # Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
@@ -125,7 +133,17 @@
 # the entity):The $name class, The $name widget, The $name file, is, provides,
 # specifies, contains, represents, a, an and the.
 
-ABBREVIATE_BRIEF       =
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
 
 # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
 # doxygen will generate a detailed section even if there is only a brief
@@ -142,7 +160,7 @@
 
 INLINE_INHERITED_MEMB  = NO
 
-# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path
+# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path
 # before files name in the file list and in the header files. If set to NO the
 # shortest path that makes the file name unique will be used
 # The default value is: YES.
@@ -212,9 +230,9 @@
 
 INHERIT_DOCS           = YES
 
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a
-# new page for each member. If set to NO, the documentation of a member will be
-# part of the file/class/namespace that contains it.
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
 # The default value is: NO.
 
 SEPARATE_MEMBER_PAGES  = NO
@@ -276,11 +294,14 @@
 # extension. Doxygen has a built-in mapping, but you can override or extend it
 # using this tag. The format is ext=language, where ext is a file extension, and
 # language is one of the parsers supported by doxygen: IDL, Java, Javascript,
-# C#, C, C++, D, PHP, Objective-C, Python, Fortran, VHDL. For instance to make
-# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C
-# (default is Fortran), use: inc=Fortran f=C.
+# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran:
+# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran:
+# Fortran. In the later case the parser tries to guess whether the code is fixed
+# or free formatted code, this is the default for Fortran type files), VHDL. For
+# instance to make doxygen treat .inc files as Fortran files (default is PHP),
+# and .f files as C (default is Fortran), use: inc=Fortran f=C.
 #
-# Note For files without extension you can use no_extension as a placeholder.
+# Note: For files without extension you can use no_extension as a placeholder.
 #
 # Note that for custom extensions you also need to set FILE_PATTERNS otherwise
 # the files are not read by doxygen.
@@ -297,10 +318,19 @@
 
 MARKDOWN_SUPPORT       = YES
 
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 0.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
 # When enabled doxygen tries to link words that correspond to documented
 # classes, or namespaces to their corresponding documentation. Such a link can
-# be prevented in individual cases by by putting a % sign in front of the word
-# or globally by setting AUTOLINK_SUPPORT to NO.
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO.
 # The default value is: YES.
 
 AUTOLINK_SUPPORT       = YES
@@ -313,7 +343,7 @@
 # diagrams that involve STL classes more complete and accurate.
 # The default value is: NO.
 
-BUILTIN_STL_SUPPORT    = YES
+BUILTIN_STL_SUPPORT    = NO
 
 # If you use Microsoft's C++/CLI language, you should set this option to YES to
 # enable parsing support.
@@ -340,13 +370,20 @@
 IDL_PROPERTY_SUPPORT   = YES
 
 # If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
+# tag is set to YES then doxygen will reuse the documentation of the first
 # member in the group (if any) for the other members of the group. By default
 # all members of a group must be documented explicitly.
 # The default value is: NO.
 
 DISTRIBUTE_GROUP_DOC   = NO
 
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
 # Set the SUBGROUPING tag to YES to allow class member groups of the same type
 # (for instance a group of public functions) to be put as a subgroup of that
 # type (e.g. under the Public Functions section). Set it to NO to prevent
@@ -405,7 +442,7 @@
 # Build related configuration options
 #---------------------------------------------------------------------------
 
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
+# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in
 # documentation are documented, even if no documentation was available. Private
 # class members and static file members will be hidden unless the
 # EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
@@ -413,37 +450,37 @@
 # normally produced when WARNINGS is set to YES.
 # The default value is: NO.
 
-EXTRACT_ALL            = YES
+EXTRACT_ALL            = NO
 
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
 # be included in the documentation.
 # The default value is: NO.
 
 EXTRACT_PRIVATE        = NO
 
-# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
 # scope will be included in the documentation.
 # The default value is: NO.
 
 EXTRACT_PACKAGE        = NO
 
-# If the EXTRACT_STATIC tag is set to YES all static members of a file will be
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
 # included in the documentation.
 # The default value is: NO.
 
-EXTRACT_STATIC         = YES
+EXTRACT_STATIC         = NO
 
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined
-# locally in source files will be included in the documentation. If set to NO
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
 # only classes defined in header files are included. Does not have any effect
 # for Java sources.
 # The default value is: YES.
 
-EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_CLASSES  = YES
 
-# This flag is only useful for Objective-C code. When set to YES local methods,
+# This flag is only useful for Objective-C code. If set to YES, local methods,
 # which are defined in the implementation section but not in the interface are
-# included in the documentation. If set to NO only methods in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
 # included.
 # The default value is: NO.
 
@@ -468,21 +505,21 @@
 
 # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all
 # undocumented classes that are normally visible in the class hierarchy. If set
-# to NO these classes will be included in the various overviews. This option has
-# no effect if EXTRACT_ALL is enabled.
+# to NO, these classes will be included in the various overviews. This option
+# has no effect if EXTRACT_ALL is enabled.
 # The default value is: NO.
 
 HIDE_UNDOC_CLASSES     = NO
 
 # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend
-# (class|struct|union) declarations. If set to NO these declarations will be
+# (class|struct|union) declarations. If set to NO, these declarations will be
 # included in the documentation.
 # The default value is: NO.
 
 HIDE_FRIEND_COMPOUNDS  = NO
 
 # If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any
-# documentation blocks found inside the body of a function. If set to NO these
+# documentation blocks found inside the body of a function. If set to NO, these
 # blocks will be appended to the function's detailed documentation block.
 # The default value is: NO.
 
@@ -496,26 +533,33 @@
 INTERNAL_DOCS          = NO
 
 # If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file
-# names in lower-case letters. If set to YES upper-case letters are also
+# names in lower-case letters. If set to YES, upper-case letters are also
 # allowed. This is useful if you have classes or files whose names only differ
 # in case and if your file system supports case sensitive file names. Windows
 # and Mac users are advised to set this option to NO.
 # The default value is: system dependent.
 
-CASE_SENSE_NAMES       = NO
+CASE_SENSE_NAMES       = YES
 
 # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with
-# their full class and namespace scopes in the documentation. If set to YES the
+# their full class and namespace scopes in the documentation. If set to YES, the
 # scope will be hidden.
 # The default value is: NO.
 
-HIDE_SCOPE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
 
 # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of
 # the files that are included by a file in the documentation of that file.
 # The default value is: YES.
 
-SHOW_INCLUDE_FILES     = NO
+SHOW_INCLUDE_FILES     = YES
 
 # If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
 # grouped member an include statement to the documentation, telling the reader
@@ -538,14 +582,14 @@
 
 # If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the
 # (detailed) documentation of file and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order.
+# name. If set to NO, the members will appear in declaration order.
 # The default value is: YES.
 
 SORT_MEMBER_DOCS       = YES
 
 # If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief
 # descriptions of file, namespace and class members alphabetically by member
-# name. If set to NO the members will appear in declaration order. Note that
+# name. If set to NO, the members will appear in declaration order. Note that
 # this will also influence the order of the classes in the class list.
 # The default value is: NO.
 
@@ -590,32 +634,30 @@
 
 STRICT_PROTO_MATCHING  = NO
 
-# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the
-# todo list. This list is created by putting \todo commands in the
-# documentation.
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
 # The default value is: YES.
 
 GENERATE_TODOLIST      = YES
 
-# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the
-# test list. This list is created by putting \test commands in the
-# documentation.
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
 # The default value is: YES.
 
 GENERATE_TESTLIST      = YES
 
-# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
 # list. This list is created by putting \bug commands in the documentation.
 # The default value is: YES.
 
 GENERATE_BUGLIST       = YES
 
-# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO)
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
 # the deprecated list. This list is created by putting \deprecated commands in
 # the documentation.
 # The default value is: YES.
 
-GENERATE_DEPRECATEDLIST= NO
+GENERATE_DEPRECATEDLIST= YES
 
 # The ENABLED_SECTIONS tag can be used to enable conditional documentation
 # sections, marked by \if <section_label> ... \endif and \cond <section_label>
@@ -635,8 +677,8 @@
 MAX_INITIALIZER_LINES  = 30
 
 # Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
-# the bottom of the documentation of classes and structs. If set to YES the list
-# will mention the files that were used to generate the documentation.
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
 # The default value is: YES.
 
 SHOW_USED_FILES        = YES
@@ -684,8 +726,7 @@
 # to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info.
 # For LaTeX the style of the bibliography can be controlled using
 # LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
-# search path. Do not use file names with spaces, bibtex cannot handle them. See
-# also \cite for info how to create references.
+# search path. See also \cite for info how to create references.
 
 CITE_BIB_FILES         =
 
@@ -701,7 +742,7 @@
 QUIET                  = NO
 
 # The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES
+# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES
 # this implies that the warnings are on.
 #
 # Tip: Turn warnings on while writing the documentation.
@@ -709,12 +750,12 @@
 
 WARNINGS               = YES
 
-# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate
 # warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
 # will automatically be disabled.
 # The default value is: YES.
 
-WARN_IF_UNDOCUMENTED   = NO
+WARN_IF_UNDOCUMENTED   = YES
 
 # If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for
 # potential errors in the documentation, such as not documenting some parameters
@@ -726,12 +767,18 @@
 
 # This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
 # are documented, but have no documentation for their parameters or return
-# value. If set to NO doxygen will only warn about wrong or incomplete parameter
-# documentation, but not about the absence of documentation.
+# value. If set to NO, doxygen will only warn about wrong or incomplete
+# parameter documentation, but not about the absence of documentation.
 # The default value is: NO.
 
 WARN_NO_PARAMDOC       = NO
 
+# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when
+# a warning is encountered.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
 # The WARN_FORMAT tag determines the format of the warning messages that doxygen
 # can produce. The string should contain the $file, $line, and $text tags, which
 # will be replaced by the file and line number from which the warning originated
@@ -755,11 +802,11 @@
 # The INPUT tag is used to specify the files and/or directories that contain
 # documented source files. You may enter file names like myfile.cpp or
 # directories like /usr/src/myproject. Separate the files or directories with
-# spaces.
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
 # Note: If this tag is empty the current directory is searched.
 
 INPUT                  = @base_dir@/src/main/include \
-                         @base_dir@/target/mainpage.dox
+                         @base_dir@/src/site/markdown
 
 # This tag can be used to specify the character encoding of the source files
 # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@@ -772,14 +819,62 @@
 
 # If the value of the INPUT tag contains directories, you can use the
 # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
-# *.h) to filter out the source-files in the directories. If left blank the
-# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii,
-# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp,
-# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown,
-# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf,
-# *.qsf, *.as and *.js.
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by doxygen.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
+# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
+# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
+# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf.
 
-FILE_PATTERNS          = *.h
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf
 
 # The RECURSIVE tag can be used to specify whether or not subdirectories should
 # be searched for input files as well.
@@ -834,7 +929,7 @@
 # *.h) to filter out the source-files in the directories. If left blank all
 # files are included.
 
-EXAMPLE_PATTERNS       =
+EXAMPLE_PATTERNS       = *
 
 # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
 # searched for input files to be used with the \include or \dontinclude commands
@@ -847,7 +942,7 @@
 # that contain images that are to be included in the documentation (see the
 # \image command).
 
-IMAGE_PATH             =
+IMAGE_PATH             = @base_dir@/src/site/images
 
 # The INPUT_FILTER tag can be used to specify a program that doxygen should
 # invoke to filter for each input file. Doxygen will invoke the filter program
@@ -863,6 +958,10 @@
 # Note that the filter must not add or remove lines; it is applied before the
 # code is scanned, but not when the output code is generated. If lines are added
 # or removed, the anchors will not be placed correctly.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
 
 INPUT_FILTER           =
 
@@ -872,11 +971,15 @@
 # (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
 # filters are used. If the FILTER_PATTERNS tag is empty or if none of the
 # patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by doxygen.
 
 FILTER_PATTERNS        =
 
 # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER ) will also be used to filter the input files that are used for
+# INPUT_FILTER) will also be used to filter the input files that are used for
 # producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
 # The default value is: NO.
 
@@ -895,7 +998,7 @@
 # (index.html). This can be useful if you have a project on for instance GitHub
 # and want to reuse the introduction page also for the doxygen output.
 
-USE_MDFILE_AS_MAINPAGE =
+USE_MDFILE_AS_MAINPAGE = @base_dir@/src/site/markdown/index.md
 
 #---------------------------------------------------------------------------
 # Configuration options related to source browsing
@@ -936,7 +1039,7 @@
 REFERENCES_RELATION    = NO
 
 # If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
-# to YES, then the hyperlinks from functions in REFERENCES_RELATION and
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
 # REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
 # link to the documentation.
 # The default value is: YES.
@@ -981,15 +1084,15 @@
 # See also: Section \class.
 # The default value is: YES.
 
-VERBATIM_HEADERS       = NO
+VERBATIM_HEADERS       = YES
 
-# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the
-# clang parser (see: http://clang.llvm.org/) for more acurate parsing at the
+# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the
+# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the
 # cost of reduced performance. This can be particularly helpful with template
 # rich C++ code for which doxygen's built-in parser lacks the necessary type
 # information.
 # Note: The availability of this option depends on whether or not doxygen was
-# compiled with the --with-libclang option.
+# generated with the -Duse-libclang=ON option for CMake.
 # The default value is: NO.
 
 CLANG_ASSISTED_PARSING = NO
@@ -1018,7 +1121,7 @@
 # Minimum value: 1, maximum value: 20, default value: 5.
 # This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
 
-COLS_IN_ALPHA_INDEX    = 2
+COLS_IN_ALPHA_INDEX    = 5
 
 # In case all classes in a project start with a common prefix, all classes will
 # be put under the same header in the alphabetical index. The IGNORE_PREFIX tag
@@ -1032,7 +1135,7 @@
 # Configuration options related to the HTML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output
+# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output
 # The default value is: YES.
 
 GENERATE_HTML          = YES
@@ -1080,7 +1183,7 @@
 # that doxygen normally uses.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
-HTML_FOOTER            = @base_dir@/src/site/doxy/license_notice_footer.txt
+HTML_FOOTER            =
 
 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
 # sheet that is used by each HTML page. It can be used to fine-tune the look of
@@ -1094,13 +1197,15 @@
 
 HTML_STYLESHEET        =
 
-# The HTML_EXTRA_STYLESHEET tag can be used to specify an additional user-
-# defined cascading style sheet that is included after the standard style sheets
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
 # created by doxygen. Using this option one can overrule certain style aspects.
 # This is preferred over using HTML_STYLESHEET since it does not replace the
-# standard style sheet and is therefor more robust against future updates.
-# Doxygen will copy the style sheet file to the output directory. For an example
-# see the documentation.
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list). For an example see the documentation.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_EXTRA_STYLESHEET  =
@@ -1116,7 +1221,7 @@
 HTML_EXTRA_FILES       =
 
 # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
-# will adjust the colors in the stylesheet and background images according to
+# will adjust the colors in the style sheet and background images according to
 # this color. Hue is specified as an angle on a colorwheel, see
 # http://en.wikipedia.org/wiki/Hue for more information. For instance the value
 # 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
@@ -1147,8 +1252,9 @@
 
 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
 # page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: YES.
+# to YES can help to show when doxygen was last run and thus if the
+# documentation is up to date.
+# The default value is: NO.
 # This tag requires that the tag GENERATE_HTML is set to YES.
 
 HTML_TIMESTAMP         = NO
@@ -1244,28 +1350,29 @@
 CHM_FILE               =
 
 # The HHC_LOCATION tag can be used to specify the location (absolute path
-# including file name) of the HTML help compiler ( hhc.exe). If non-empty
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
 # doxygen will try to run the HTML help compiler on the generated index.hhp.
 # The file has to be specified with full path.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 HHC_LOCATION           =
 
-# The GENERATE_CHI flag controls if a separate .chi index file is generated (
-# YES) or that it should be included in the master .chm file ( NO).
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the master .chm file (NO).
 # The default value is: NO.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 GENERATE_CHI           = NO
 
-# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc)
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
 # and project file content.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
 CHM_INDEX_ENCODING     =
 
-# The BINARY_TOC flag controls whether a binary table of contents is generated (
-# YES) or a normal table of contents ( NO) in the .chm file.
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
 # The default value is: NO.
 # This tag requires that the tag GENERATE_HTMLHELP is set to YES.
 
@@ -1378,7 +1485,7 @@
 # index structure (just like the one that is generated for HTML Help). For this
 # to work a browser that supports JavaScript, DHTML, CSS and frames is required
 # (i.e. any modern browser). Windows users are probably better off using the
-# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
 # further fine-tune the look of the index. As an example, the default style
 # sheet generated by doxygen has an example that shows how to put an image at
 # the root of the tree instead of the PROJECT_NAME. Since the tree basically has
@@ -1406,7 +1513,7 @@
 
 TREEVIEW_WIDTH         = 250
 
-# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to
+# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to
 # external symbols imported via tag files in a separate window.
 # The default value is: NO.
 # This tag requires that the tag GENERATE_HTML is set to YES.
@@ -1435,7 +1542,7 @@
 
 # Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
 # http://www.mathjax.org) which uses client side Javascript for the rendering
-# instead of using prerendered bitmaps. Use this if you do not have LaTeX
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
 # installed or if you want to formulas look prettier in the HTML output. When
 # enabled you may also need to install MathJax separately and configure the path
 # to it using the MATHJAX_RELPATH option.
@@ -1505,11 +1612,11 @@
 
 # When the SERVER_BASED_SEARCH tag is enabled the search engine will be
 # implemented using a web server instead of a web client using Javascript. There
-# are two flavours of web server based searching depending on the
-# EXTERNAL_SEARCH setting. When disabled, doxygen will generate a PHP script for
-# searching and an index file used by the script. When EXTERNAL_SEARCH is
-# enabled the indexing and searching needs to be provided by external tools. See
-# the section "External Indexing and Searching" for details.
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
 # The default value is: NO.
 # This tag requires that the tag SEARCHENGINE is set to YES.
 
@@ -1521,7 +1628,7 @@
 # external search engine pointed to by the SEARCHENGINE_URL option to obtain the
 # search results.
 #
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# Doxygen ships with an example indexer (doxyindexer) and search engine
 # (doxysearch.cgi) which are based on the open source search engine library
 # Xapian (see: http://xapian.org/).
 #
@@ -1534,7 +1641,7 @@
 # The SEARCHENGINE_URL should point to a search engine hosted by a web server
 # which will return the search results when EXTERNAL_SEARCH is enabled.
 #
-# Doxygen ships with an example indexer ( doxyindexer) and search engine
+# Doxygen ships with an example indexer (doxyindexer) and search engine
 # (doxysearch.cgi) which are based on the open source search engine library
 # Xapian (see: http://xapian.org/). See the section "External Indexing and
 # Searching" for details.
@@ -1572,7 +1679,7 @@
 # Configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_LATEX tag is set to YES doxygen will generate LaTeX output.
+# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output.
 # The default value is: YES.
 
 GENERATE_LATEX         = NO
@@ -1603,7 +1710,7 @@
 
 MAKEINDEX_CMD_NAME     = makeindex
 
-# If the COMPACT_LATEX tag is set to YES doxygen generates more compact LaTeX
+# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX
 # documents. This may be useful for small projects and may help to save some
 # trees in general.
 # The default value is: NO.
@@ -1618,12 +1725,15 @@
 # The default value is: a4.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-PAPER_TYPE             = a4wide
+PAPER_TYPE             = a4
 
 # The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
-# that should be included in the LaTeX output. To get the times font for
-# instance you can specify
-# EXTRA_PACKAGES=times
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
 # If left blank no extra packages will be included.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
@@ -1637,23 +1747,36 @@
 #
 # Note: Only use a user-defined header if you know what you are doing! The
 # following commands have a special meaning inside the header: $title,
-# $datetime, $date, $doxygenversion, $projectname, $projectnumber. Doxygen will
-# replace them by respectively the title of the page, the current date and time,
-# only the current date, the version number of doxygen, the project name (see
-# PROJECT_NAME), or the project number (see PROJECT_NUMBER).
+# $datetime, $date, $doxygenversion, $projectname, $projectnumber,
+# $projectbrief, $projectlogo. Doxygen will replace $title with the empty
+# string, for the replacement values of the other commands the user is referred
+# to HTML_HEADER.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_HEADER           =
 
 # The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the
 # generated LaTeX document. The footer should contain everything after the last
-# chapter. If it is left blank doxygen will generate a standard footer.
+# chapter. If it is left blank doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer.
 #
 # Note: Only use a user-defined footer if you know what you are doing!
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
 LATEX_FOOTER           =
 
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
 # The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
 # other source files which should be copied to the LATEX_OUTPUT output
 # directory. Note that the files will be copied as-is; there are no commands or
@@ -1669,15 +1792,15 @@
 # The default value is: YES.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-PDF_HYPERLINKS         = NO
+PDF_HYPERLINKS         = YES
 
-# If the LATEX_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
-# the PDF file directly from the LaTeX files. Set this option to YES to get a
+# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate
+# the PDF file directly from the LaTeX files. Set this option to YES, to get a
 # higher quality PDF documentation.
 # The default value is: YES.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-USE_PDFLATEX           = NO
+USE_PDFLATEX           = YES
 
 # If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode
 # command to the generated LaTeX files. This will instruct LaTeX to keep running
@@ -1713,11 +1836,19 @@
 
 LATEX_BIB_STYLE        = plain
 
+# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
+# page will contain the date and time when the page was generated. Setting this
+# to NO can help when comparing the output of multiple runs.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_TIMESTAMP        = NO
+
 #---------------------------------------------------------------------------
 # Configuration options related to the RTF output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_RTF tag is set to YES doxygen will generate RTF output. The
+# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The
 # RTF output is optimized for Word 97 and may not look too pretty with other RTF
 # readers/editors.
 # The default value is: NO.
@@ -1732,7 +1863,7 @@
 
 RTF_OUTPUT             = rtf
 
-# If the COMPACT_RTF tag is set to YES doxygen generates more compact RTF
+# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF
 # documents. This may be useful for small projects and may help to save some
 # trees in general.
 # The default value is: NO.
@@ -1769,11 +1900,21 @@
 
 RTF_EXTENSIONS_FILE    =
 
+# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code
+# with syntax highlighting in the RTF output.
+#
+# Note that which sources are shown also depends on other settings such as
+# SOURCE_BROWSER.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_SOURCE_CODE        = NO
+
 #---------------------------------------------------------------------------
 # Configuration options related to the man page output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_MAN tag is set to YES doxygen will generate man pages for
+# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for
 # classes and files.
 # The default value is: NO.
 
@@ -1797,6 +1938,13 @@
 
 MAN_EXTENSION          = .3
 
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
 # If the MAN_LINKS tag is set to YES and doxygen generates man output, then it
 # will generate one additional man file for each entity documented in the real
 # man page(s). These additional files only source the real man page, but without
@@ -1810,7 +1958,7 @@
 # Configuration options related to the XML output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_XML tag is set to YES doxygen will generate an XML file that
+# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that
 # captures the structure of the code including all documentation.
 # The default value is: NO.
 
@@ -1824,7 +1972,7 @@
 
 XML_OUTPUT             = xml
 
-# If the XML_PROGRAMLISTING tag is set to YES doxygen will dump the program
+# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program
 # listings (including syntax highlighting and cross-referencing information) to
 # the XML output. Note that enabling this will significantly increase the size
 # of the XML output.
@@ -1837,7 +1985,7 @@
 # Configuration options related to the DOCBOOK output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_DOCBOOK tag is set to YES doxygen will generate Docbook files
+# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files
 # that can be used to generate PDF.
 # The default value is: NO.
 
@@ -1851,14 +1999,23 @@
 
 DOCBOOK_OUTPUT         = docbook
 
+# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the
+# program listings (including syntax highlighting and cross-referencing
+# information) to the DOCBOOK output. Note that enabling this will significantly
+# increase the size of the DOCBOOK output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_PROGRAMLISTING = NO
+
 #---------------------------------------------------------------------------
 # Configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_AUTOGEN_DEF tag is set to YES doxygen will generate an AutoGen
-# Definitions (see http://autogen.sf.net) file that captures the structure of
-# the code including all documentation. Note that this feature is still
-# experimental and incomplete at the moment.
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an
+# AutoGen Definitions (see http://autogen.sf.net) file that captures the
+# structure of the code including all documentation. Note that this feature is
+# still experimental and incomplete at the moment.
 # The default value is: NO.
 
 GENERATE_AUTOGEN_DEF   = NO
@@ -1867,7 +2024,7 @@
 # Configuration options related to the Perl module output
 #---------------------------------------------------------------------------
 
-# If the GENERATE_PERLMOD tag is set to YES doxygen will generate a Perl module
+# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module
 # file that captures the structure of the code including all documentation.
 #
 # Note that this feature is still experimental and incomplete at the moment.
@@ -1875,7 +2032,7 @@
 
 GENERATE_PERLMOD       = NO
 
-# If the PERLMOD_LATEX tag is set to YES doxygen will generate the necessary
+# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary
 # Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
 # output from the Perl module output.
 # The default value is: NO.
@@ -1883,9 +2040,9 @@
 
 PERLMOD_LATEX          = NO
 
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be nicely
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
 # formatted so it can be parsed by a human reader. This is useful if you want to
-# understand what is going on. On the other hand, if this tag is set to NO the
+# understand what is going on. On the other hand, if this tag is set to NO, the
 # size of the Perl module output will be much smaller and Perl will parse it
 # just the same.
 # The default value is: YES.
@@ -1905,20 +2062,20 @@
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
 
-# If the ENABLE_PREPROCESSING tag is set to YES doxygen will evaluate all
+# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all
 # C-preprocessor directives found in the sources and include files.
 # The default value is: YES.
 
 ENABLE_PREPROCESSING   = YES
 
-# If the MACRO_EXPANSION tag is set to YES doxygen will expand all macro names
-# in the source code. If set to NO only conditional compilation will be
+# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
 # performed. Macro expansion can be done in a controlled way by setting
 # EXPAND_ONLY_PREDEF to YES.
 # The default value is: NO.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
 
-MACRO_EXPANSION        = YES
+MACRO_EXPANSION        = NO
 
 # If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
 # the macro expansion is limited to the macros specified with the PREDEFINED and
@@ -1928,7 +2085,7 @@
 
 EXPAND_ONLY_PREDEF     = NO
 
-# If the SEARCH_INCLUDES tag is set to YES the includes files in the
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
 # INCLUDE_PATH will be searched if a #include is found.
 # The default value is: YES.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
@@ -1972,9 +2129,9 @@
 EXPAND_AS_DEFINED      =
 
 # If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will
-# remove all refrences to function-like macros that are alone on a line, have an
-# all uppercase name, and do not end with a semicolon. Such function macros are
-# typically used for boiler-plate code, and will confuse the parser if not
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
 # removed.
 # The default value is: YES.
 # This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
@@ -1994,7 +2151,7 @@
 # where loc1 and loc2 can be relative or absolute paths or URLs. See the
 # section "Linking to external documentation" for more information about the use
 # of tag files.
-# Note: Each tag file must have an unique name (where the name does NOT include
+# Note: Each tag file must have a unique name (where the name does NOT include
 # the path). If a tag file is not located in the directory in which doxygen is
 # run, you must also specify the path to the tagfile here.
 
@@ -2006,20 +2163,21 @@
 
 GENERATE_TAGFILE       =
 
-# If the ALLEXTERNALS tag is set to YES all external class will be listed in the
-# class index. If set to NO only the inherited external classes will be listed.
+# If the ALLEXTERNALS tag is set to YES, all external class will be listed in
+# the class index. If set to NO, only the inherited external classes will be
+# listed.
 # The default value is: NO.
 
 ALLEXTERNALS           = NO
 
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed in
-# the modules index. If set to NO, only the current project's groups will be
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the modules index. If set to NO, only the current project's groups will be
 # listed.
 # The default value is: YES.
 
 EXTERNAL_GROUPS        = YES
 
-# If the EXTERNAL_PAGES tag is set to YES all external pages will be listed in
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
 # the related pages index. If set to NO, only the current project's pages will
 # be listed.
 # The default value is: YES.
@@ -2036,7 +2194,7 @@
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
 
-# If the CLASS_DIAGRAMS tag is set to YES doxygen will generate a class diagram
+# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram
 # (in HTML and LaTeX) for classes with base or super classes. Setting the tag to
 # NO turns the diagrams off. Note that this option also works with HAVE_DOT
 # disabled, but it is recommended to install and use dot, since it yields more
@@ -2061,7 +2219,7 @@
 
 DIA_PATH               =
 
-# If set to YES, the inheritance and collaboration graphs will hide inheritance
+# If set to YES the inheritance and collaboration graphs will hide inheritance
 # and usage relations if the target is undocumented or is not a class.
 # The default value is: YES.
 
@@ -2072,7 +2230,7 @@
 # http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
 # Bell Labs. The other options in this section have no effect if this option is
 # set to NO
-# The default value is: NO.
+# The default value is: YES.
 
 HAVE_DOT               = NO
 
@@ -2086,7 +2244,7 @@
 
 DOT_NUM_THREADS        = 0
 
-# When you want a differently looking font n the dot files that doxygen
+# When you want a differently looking font in the dot files that doxygen
 # generates you can specify the font name using DOT_FONTNAME. You need to make
 # sure dot is able to find the font, which can be done by putting it in a
 # standard location or by setting the DOTFONTPATH environment variable or by
@@ -2134,7 +2292,7 @@
 
 GROUP_GRAPHS           = YES
 
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
+# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and
 # collaboration diagrams in a style similar to the OMG's Unified Modeling
 # Language.
 # The default value is: NO.
@@ -2186,7 +2344,8 @@
 #
 # Note that enabling this option will significantly increase the time of a run.
 # So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
 # The default value is: NO.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2197,7 +2356,8 @@
 #
 # Note that enabling this option will significantly increase the time of a run.
 # So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
 # The default value is: NO.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2208,7 +2368,7 @@
 # The default value is: YES.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
-GRAPHICAL_HIERARCHY    = NO
+GRAPHICAL_HIERARCHY    = YES
 
 # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the
 # dependencies a directory has on other directories in a graphical way. The
@@ -2220,11 +2380,17 @@
 DIRECTORY_GRAPH        = YES
 
 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot.
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# http://www.graphviz.org/)).
 # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order
 # to make the SVG files visible in IE 9+ (other browsers do not have this
 # requirement).
-# Possible values are: png, jpg, gif and svg.
+# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd,
+# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo,
+# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and
+# png:gdiplus:gdiplus.
 # The default value is: png.
 # This tag requires that the tag HAVE_DOT is set to YES.
 
@@ -2267,6 +2433,24 @@
 
 DIAFILE_DIRS           =
 
+# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file. If left blank, it is assumed
+# PlantUML is not used or called during a preprocessing step. Doxygen will
+# generate a warning when it encounters a \startuml command in this case and
+# will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for plantuml.
+
+PLANTUML_CFG_FILE      =
+
+# When using plantuml, the specified paths are searched for files specified by
+# the !include statement in a plantuml block.
+
+PLANTUML_INCLUDE_PATH  =
+
 # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
 # that will be shown in the graph. If the number of nodes in a graph becomes
 # larger than this value, doxygen will truncate the graph, which is visualized
@@ -2303,7 +2487,7 @@
 
 DOT_TRANSPARENT        = NO
 
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
 # files in one run (i.e. multiple -o and -T options on the command line). This
 # makes dot run faster, but since only newer versions of dot (>1.8.10) support
 # this, this feature is disabled by default.
@@ -2320,7 +2504,7 @@
 
 GENERATE_LEGEND        = YES
 
-# If the DOT_CLEANUP tag is set to YES doxygen will remove the intermediate dot
+# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot
 # files that are used to generate the various graphs.
 # The default value is: YES.
 # This tag requires that the tag HAVE_DOT is set to YES.
diff --git a/src/site/images/add.gif b/src/site/images/add.gif
new file mode 100644
index 0000000..ac0bdcc
--- /dev/null
+++ b/src/site/images/add.gif
Binary files differ
diff --git a/src/site/images/fix.gif b/src/site/images/fix.gif
new file mode 100644
index 0000000..2585f13
--- /dev/null
+++ b/src/site/images/fix.gif
Binary files differ
diff --git a/src/site/images/update.gif b/src/site/images/update.gif
new file mode 100644
index 0000000..71ca225
--- /dev/null
+++ b/src/site/images/update.gif
Binary files differ
diff --git a/src/site/markdown/change-report-gh.md b/src/site/markdown/change-report-gh.md
new file mode 100644
index 0000000..32c258b
--- /dev/null
+++ b/src/site/markdown/change-report-gh.md
@@ -0,0 +1,511 @@
+Changelog {#changelog}
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
+<!--
+ 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.
+-->
+
+## Changes
+
+### Release History
+
+|                                                                                        |            |                      |
+| -------------------------------------------------------------------------------------- | ---------- | -------------------- |
+| Version                                                                                | Date       | Description          |
+| [0.11.0](#0.11.0) | 2020-08-09 | Maintenance release. |
+| [0.10.0](#0.10.0) | 2008-04-03 | First Apache release |
+| [0.9.7](#0.9.7)   | 2004-05-10 |                      |
+| [0.9.6](#0.9.6)   | 2004-04-11 |                      |
+| [0.9.5](#0.9.5)   | 2004-02-04 |                      |
+| [0.9.4](#0.9.4)   | 2003-10-25 |                      |
+| [0.9.3](#0.9.3)   | 2003-09-19 |                      |
+| [0.9.2](#0.9.2)   | 2003-08-10 |                      |
+| [0.9.1](#0.9.1)   | 2003-08-06 |                      |
+| [0.9.0](#0.9.0)   | 2003-08-06 |                      |
+| [0.1.1](#0.1.1)   | 2003-07-09 |                      |
+| [0.1.0](#0.1.0)   | 2003-07-08 |                      |
+| [0.0.1](#0.0.1)   | 2003-05-31 |                      |
+
+<a name="0.11.0"/>
+### Release 0.11.0 - 2020-08-09
+
+|                                                                     |                                                                                                                                                                                                                                                 |    |
+| ------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                                                                                                                                                                                                         | By |
+| ![](images/fix.gif "fix")    | cmake and autotools generate different versioned binaries Fixes [LOGCXX-512](https://issues.apache.org/jira/browse/LOGCXX-512).                                                                                                                 |    |
+| ![](images/fix.gif "fix")    | CachedDateFormat reuses timestamps without updating milliseconds after formatting timestamp with ms == 654 Fixes [LOGCXX-506](https://issues.apache.org/jira/browse/LOGCXX-506).                                                                |    |
+| ![](images/update.gif "update") | Checksums/Signatures don't match for log4cxx binaries Fixes [LOGCXX-503](https://issues.apache.org/jira/browse/LOGCXX-503).                                                                                                                     |    |
+| ![](images/update.gif "update") | appenderattachable.h function doc formatted "incorrectly" Fixes [LOGCXX-502](https://issues.apache.org/jira/browse/LOGCXX-502).                                                                                                                 |    |
+| ![](images/update.gif "update") | Logging in Timing-Critical Applications Fixes [LOGCXX-500](https://issues.apache.org/jira/browse/LOGCXX-500).                                                                                                                                   |    |
+| ![](images/fix.gif "fix")    | Provide a windows build environment for the project by replacing the ant build with a CMake build Fixes [LOGCXX-494](https://issues.apache.org/jira/browse/LOGCXX-494).                                                                         |    |
+| ![](images/fix.gif "fix")    | Wrong usage of milli- vs. micro- and non- vs. milliseconds in some docs. Fixes [LOGCXX-493](https://issues.apache.org/jira/browse/LOGCXX-493).                                                                                                  |    |
+| ![](images/fix.gif "fix")    | conditional expression is constant Fixes [LOGCXX-490](https://issues.apache.org/jira/browse/LOGCXX-490).                                                                                                                                        |    |
+| ![](images/fix.gif "fix")    | Space after log level hides messages Fixes [LOGCXX-488](https://issues.apache.org/jira/browse/LOGCXX-488).                                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Spelling error s/excute/execute Fixes [LOGCXX-484](https://issues.apache.org/jira/browse/LOGCXX-484).                                                                                                                                           |    |
+| ![](images/update.gif "update") | Not able to see hebrew values when logging in log4cxx Fixes [LOGCXX-483](https://issues.apache.org/jira/browse/LOGCXX-483).                                                                                                                     |    |
+| ![](images/fix.gif "fix")    | Build failure with GCC-6 Fixes [LOGCXX-482](https://issues.apache.org/jira/browse/LOGCXX-482).                                                                                                                                                  |    |
+| ![](images/fix.gif "fix")    | TimeBasedRollingPolicy should append as configured on rollover Fixes [LOGCXX-464](https://issues.apache.org/jira/browse/LOGCXX-464).                                                                                                            |    |
+| ![](images/fix.gif "fix")    | LogLog::setQuietMode(true) does not suppress exception reporting Fixes [LOGCXX-455](https://issues.apache.org/jira/browse/LOGCXX-455).                                                                                                          |    |
+| ![](images/fix.gif "fix")    | make install fails, trying to overwrite header files Fixes [LOGCXX-446](https://issues.apache.org/jira/browse/LOGCXX-446).                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Return by const reference in Logger::getName() Fixes [LOGCXX-443](https://issues.apache.org/jira/browse/LOGCXX-443).                                                                                                                            |    |
+| ![](images/fix.gif "fix")    | Autoconf 2.69 needs 'ACLOCAL\_AMFLAGS= -I .' Fixes [LOGCXX-433](https://issues.apache.org/jira/browse/LOGCXX-433).                                                                                                                              |    |
+| ![](images/fix.gif "fix")    | Wildcards in Makefile.am break either VPATH or non-VPATH installs Fixes [LOGCXX-428](https://issues.apache.org/jira/browse/LOGCXX-428).                                                                                                         |    |
+| ![](images/fix.gif "fix")    | exceptions in CachedDateFormatTestCase after LOGCXX-420 Fixes [LOGCXX-425](https://issues.apache.org/jira/browse/LOGCXX-425).                                                                                                                   |    |
+| ![](images/fix.gif "fix")    | liblog4cxx.pc.in should reflect dependency on apr-1, apr-1-util Fixes [LOGCXX-424](https://issues.apache.org/jira/browse/LOGCXX-424).                                                                                                           |    |
+| ![](images/fix.gif "fix")    | Repair autogen script warnings Fixes [LOGCXX-423](https://issues.apache.org/jira/browse/LOGCXX-423).                                                                                                                                            |    |
+| ![](images/fix.gif "fix")    | Regression of LOGCXX-420 Fixes [LOGCXX-422](https://issues.apache.org/jira/browse/LOGCXX-422).                                                                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Possible out\_of\_range exception for millisecond formats in CachedDateFormat Fixes [LOGCXX-420](https://issues.apache.org/jira/browse/LOGCXX-420).                                                                                             |    |
+| ![](images/fix.gif "fix")    | atoi undefined on Mac OS 10.9 compiling stringhelper.cpp Fixes [LOGCXX-417](https://issues.apache.org/jira/browse/LOGCXX-417).                                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Configure and watch could crash on app exit with static linking Fixes [LOGCXX-416](https://issues.apache.org/jira/browse/LOGCXX-416).                                                                                                           |    |
+| ![](images/fix.gif "fix")    | Empty XML configuration file causes crash Fixes [LOGCXX-415](https://issues.apache.org/jira/browse/LOGCXX-415).                                                                                                                                 |    |
+| ![](images/fix.gif "fix")    | possibly wrong use of autotools docdir (due to Alex Zbarcea) Fixes [LOGCXX-414](https://issues.apache.org/jira/browse/LOGCXX-414).                                                                                                              |    |
+| ![](images/fix.gif "fix")    | log4cxx doesn't compile on openembedded (due to Alex Zbarcea) Fixes [LOGCXX-413](https://issues.apache.org/jira/browse/LOGCXX-413).                                                                                                             |    |
+| ![](images/fix.gif "fix")    | Log4cxx doesn't roll normally when working under multiple processes environment Fixes [LOGCXX-412](https://issues.apache.org/jira/browse/LOGCXX-412).                                                                                           |    |
+| ![](images/fix.gif "fix")    | Crash when logging on multiple threads. Fixes [LOGCXX-411](https://issues.apache.org/jira/browse/LOGCXX-411).                                                                                                                                   |    |
+| ![](images/fix.gif "fix")    | C++11 does not allow char literals with highest bit set unless cast Fixes [LOGCXX-400](https://issues.apache.org/jira/browse/LOGCXX-400).                                                                                                       |    |
+| ![](images/fix.gif "fix")    | Non-ascii character output wrong. Fixes [LOGCXX-399](https://issues.apache.org/jira/browse/LOGCXX-399).                                                                                                                                         |    |
+| ![](images/fix.gif "fix")    | Infinite loop in Transcoder::encode(const LogString& src, std::wstring& dst) Fixes [LOGCXX-398](https://issues.apache.org/jira/browse/LOGCXX-398).                                                                                              |    |
+| ![](images/fix.gif "fix")    | Levels are not thread safe Fixes [LOGCXX-394](https://issues.apache.org/jira/browse/LOGCXX-394).                                                                                                                                                |    |
+| ![](images/fix.gif "fix")    | Hierarchy::updateParents loops forever on illegal logger-name like '.logger1' Fixes [LOGCXX-388](https://issues.apache.org/jira/browse/LOGCXX-388).                                                                                             |    |
+| ![](images/fix.gif "fix")    | Mingw build type conversion error Fixes [LOGCXX-382](https://issues.apache.org/jira/browse/LOGCXX-382).                                                                                                                                         |    |
+| ![](images/fix.gif "fix")    | Pkgconfig can't find dependencies properly if log4cxx built statically Fixes [LOGCXX-381](https://issues.apache.org/jira/browse/LOGCXX-381).                                                                                                    |    |
+| ![](images/fix.gif "fix")    | Load Properties File Fails When There Are multibyte Characters in the Path Fixes [LOGCXX-369](https://issues.apache.org/jira/browse/LOGCXX-369).                                                                                                |    |
+| ![](images/fix.gif "fix")    | method and class name functions not properly implemented Fixes [LOGCXX-368](https://issues.apache.org/jira/browse/LOGCXX-368).                                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Build fails on Linux with g++ 4.4 Fixes [LOGCXX-367](https://issues.apache.org/jira/browse/LOGCXX-367).                                                                                                                                         |    |
+| ![](images/fix.gif "fix")    | Errors when compile log4cxx 0.10.0 under Win7 x64 with Visual Studio 2010 (due to Christian Boos and Feng Nan) Fixes [LOGCXX-366](https://issues.apache.org/jira/browse/LOGCXX-366).                                                            |    |
+| ![](images/fix.gif "fix")    | Unit tests fail on system dates later than 2009-12-31. Fixes [LOGCXX-365](https://issues.apache.org/jira/browse/LOGCXX-365).                                                                                                                    |    |
+| ![](images/fix.gif "fix")    | SMTPAppender generating Emails with an empty body Fixes [LOGCXX-358](https://issues.apache.org/jira/browse/LOGCXX-358).                                                                                                                         |    |
+| ![](images/fix.gif "fix")    | apache-log4cxx-0.10.0\\src\\main\\include\\log4cxx\\spi\\configurator.h(57) : warning C4231: nonstandard extension used : 'extern' before template explicit instantiation Fixes [LOGCXX-356](https://issues.apache.org/jira/browse/LOGCXX-356). |    |
+| ![](images/fix.gif "fix")    | When a client disconnects the SocketHubAppender crashes on the next log message Fixes [LOGCXX-353](https://issues.apache.org/jira/browse/LOGCXX-353).                                                                                           |    |
+| ![](images/fix.gif "fix")    | Download page does not have link to KEYS file Fixes [LOGCXX-351](https://issues.apache.org/jira/browse/LOGCXX-351).                                                                                                                             |    |
+| ![](images/fix.gif "fix")    | Transcoder::encodeCharsetName bungles encoding Fixes [LOGCXX-340](https://issues.apache.org/jira/browse/LOGCXX-340).                                                                                                                            |    |
+| ![](images/update.gif "update") | Child thread does not inherit a copy of the mapped diagnostic context of its parent Fixes [LOGCXX-339](https://issues.apache.org/jira/browse/LOGCXX-339).                                                                                       |    |
+| ![](images/fix.gif "fix")    | Suggested fix for socketappender not reconnecting multiple times Fixes [LOGCXX-337](https://issues.apache.org/jira/browse/LOGCXX-337).                                                                                                          |    |
+| ![](images/fix.gif "fix")    | Test compilation fails: Overloading ambiguity Fixes [LOGCXX-336](https://issues.apache.org/jira/browse/LOGCXX-336).                                                                                                                             |    |
+| ![](images/fix.gif "fix")    | DailyRollingFileAppender should roll if program doesn't run at rolling time Fixes [LOGCXX-331](https://issues.apache.org/jira/browse/LOGCXX-331).                                                                                               |    |
+| ![](images/fix.gif "fix")    | TLS memory of APR is not freed in destructor of APRInitializer Fixes [LOGCXX-320](https://issues.apache.org/jira/browse/LOGCXX-320).                                                                                                            |    |
+| ![](images/fix.gif "fix")    | Please make sure that the LOG4CXX\_\* macro's can be used as ordinary statements. Fixes [LOGCXX-319](https://issues.apache.org/jira/browse/LOGCXX-319).                                                                                         |    |
+| ![](images/fix.gif "fix")    | Log4cxx triggers locking inversion which can result in a deadlock. Fixes [LOGCXX-317](https://issues.apache.org/jira/browse/LOGCXX-317).                                                                                                        |    |
+| ![](images/fix.gif "fix")    | Build process fails in case of absence of iconv support in apr-util Fixes [LOGCXX-313](https://issues.apache.org/jira/browse/LOGCXX-313).                                                                                                       |    |
+| ![](images/fix.gif "fix")    | Property/DOMConfigurator::configureAndWatch can continue to run after APR termination Fixes [LOGCXX-305](https://issues.apache.org/jira/browse/LOGCXX-305).                                                                                     |    |
+| ![](images/fix.gif "fix")    | BasicConfigurator::configure results in writer not set warning. Fixes [LOGCXX-304](https://issues.apache.org/jira/browse/LOGCXX-304).                                                                                                           |    |
+| ![](images/fix.gif "fix")    | DOMConfigurator does not set ErrorHandler. Fixes [LOGCXX-303](https://issues.apache.org/jira/browse/LOGCXX-303).                                                                                                                                |    |
+| ![](images/fix.gif "fix")    | ODBCAppender connection settings broken (or just have changed). Fixes [LOGCXX-300](https://issues.apache.org/jira/browse/LOGCXX-300).                                                                                                           |    |
+| ![](images/fix.gif "fix")    | odbcappender.cpp does not compile with unixODBC on linux. Fixes [LOGCXX-299](https://issues.apache.org/jira/browse/LOGCXX-299).                                                                                                                 |    |
+| ![](images/fix.gif "fix")    | SMTPAppender does not build properly with autotools. Fixes [LOGCXX-298](https://issues.apache.org/jira/browse/LOGCXX-298).                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Escape sequences not recognized in property files. Fixes [LOGCXX-293](https://issues.apache.org/jira/browse/LOGCXX-293).                                                                                                                        |    |
+| ![](images/fix.gif "fix")    | Value continuation does not properly handle CRLF in property files. Fixes [LOGCXX-292](https://issues.apache.org/jira/browse/LOGCXX-292).                                                                                                       |    |
+| ![](images/fix.gif "fix")    | Tab characters are not recognized in property files. Fixes [LOGCXX-291](https://issues.apache.org/jira/browse/LOGCXX-291).                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Unnecessary trailing semi-colons after LOG4CXX\_INFO et al in docs, examples and tests. Fixes [LOGCXX-288](https://issues.apache.org/jira/browse/LOGCXX-288).                                                                                   |    |
+| ![](images/fix.gif "fix")    | gcc 4.3 requires \#include \<cstring\> when using memcpy and related. Fixes [LOGCXX-286](https://issues.apache.org/jira/browse/LOGCXX-286).                                                                                                     |    |
+| ![](images/fix.gif "fix")    | LevelRangeFilter has default value for acceptOnMatch that is different from log4j Fixes [LOGCXX-285](https://issues.apache.org/jira/browse/LOGCXX-285).                                                                                         |    |
+| ![](images/fix.gif "fix")    | Unit tests fail to compile with xlc\_r on AIX Fixes [LOGCXX-284](https://issues.apache.org/jira/browse/LOGCXX-284).                                                                                                                             |    |
+| ![](images/fix.gif "fix")    | Suspicious, but harmless, reuse of LOCAL1 in SyslogAppender Fixes [LOGCXX-283](https://issues.apache.org/jira/browse/LOGCXX-283).                                                                                                               |    |
+| ![](images/fix.gif "fix")    | Thread::sleep not affected by Thread::interrupt. Fixes [LOGCXX-282](https://issues.apache.org/jira/browse/LOGCXX-282).                                                                                                                          |    |
+| ![](images/fix.gif "fix")    | Sun Studio 11 reports function hides base virtual function warning Fixes [LOGCXX-281](https://issues.apache.org/jira/browse/LOGCXX-281).                                                                                                        |    |
+| ![](images/fix.gif "fix")    | tests and sample code unnecessarily compiled during default make target Fixes [LOGCXX-280](https://issues.apache.org/jira/browse/LOGCXX-280).                                                                                                   |    |
+| ![](images/fix.gif "fix")    | Threads for reconnecting sockets do not end cleanly when program exits Fixes [LOGCXX-278](https://issues.apache.org/jira/browse/LOGCXX-278).                                                                                                    |    |
+| ![](images/fix.gif "fix")    | Reconnection not working for sockets Fixes [LOGCXX-277](https://issues.apache.org/jira/browse/LOGCXX-277).                                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | AndFilter and others defined but not implemented Fixes [LOGCXX-276](https://issues.apache.org/jira/browse/LOGCXX-276).                                                                                                                          |    |
+| ![](images/fix.gif "fix")    | Headers cannot be included with very strict warning settings Fixes [LOGCXX-275](https://issues.apache.org/jira/browse/LOGCXX-275).                                                                                                              |    |
+| ![](images/fix.gif "fix")    | Prevent filenamepatterntestcase from failing in some timezones Fixes [LOGCXX-273](https://issues.apache.org/jira/browse/LOGCXX-273).                                                                                                            |    |
+| ![](images/update.gif "update") | Apache log4cxx 0.11.0 release Fixes [LOGCXX-272](https://issues.apache.org/jira/browse/LOGCXX-272).                                                                                                                                             |    |
+| ![](images/fix.gif "fix")    | MDC::put will not overwrite existing key value pair Fixes [LOGCXX-271](https://issues.apache.org/jira/browse/LOGCXX-271).                                                                                                                       |    |
+| ![](images/fix.gif "fix")    | Add ability to compile out logging by logging level. Fixes [LOGCXX-270](https://issues.apache.org/jira/browse/LOGCXX-270).                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Local variables hide member variables Fixes [LOGCXX-267](https://issues.apache.org/jira/browse/LOGCXX-267).                                                                                                                                     |    |
+| ![](images/fix.gif "fix")    | Eliminate Extra ";" ignored warnings Fixes [LOGCXX-266](https://issues.apache.org/jira/browse/LOGCXX-266).                                                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Eliminate anachronism warnings Fixes [LOGCXX-265](https://issues.apache.org/jira/browse/LOGCXX-265).                                                                                                                                            |    |
+| ![](images/fix.gif "fix")    | Bad link to log4cxx-dev archive Fixes [LOGCXX-263](https://issues.apache.org/jira/browse/LOGCXX-263).                                                                                                                                           |    |
+| ![](images/fix.gif "fix")    | socketappendertestcase and xmlsocketappendertestcase not run Fixes [LOGCXX-262](https://issues.apache.org/jira/browse/LOGCXX-262).                                                                                                              |    |
+| ![](images/fix.gif "fix")    | Console appender crashes if layout is not set Fixes [LOGCXX-249](https://issues.apache.org/jira/browse/LOGCXX-249).                                                                                                                             |    |
+| ![](images/add.gif "add")    | Set SONAME in cmake like autotools based buildsystem would do. Fixes [32](https://github.com/apache/logging-log4cxx/pull/32).                                                                                                                   |    |
+| ![](images/add.gif "add")    | Implementation of map-based filter. Fixes [24](https://github.com/apache/logging-log4cxx/pull/24).                                                                                                                                              |    |
+| ![](images/add.gif "add")    | Added support for building log4cxx as a statically linked library on Windows. Fixes [21](https://github.com/apache/logging-log4cxx/pull/21).                                                                                                    |    |
+| ![](images/add.gif "add")    | Replaced ant build with cmake. Fixes [14](https://github.com/apache/logging-log4cxx/pull/14).                                                                                                                                                   |    |
+| ![](images/add.gif "add")    | JSONLayout Fixes [13](https://github.com/apache/logging-log4cxx/pull/13).                                                                                                                                                                       |    |
+| ![](images/update.gif "update") | Behavior of StringHelper::startsWith and endsWith synced.                                                                                                                                                                                       |    |
+| ![](images/update.gif "update") | Documented C (class) and M (method) log format keywords.                                                                                                                                                                                        |    |
+| ![](images/add.gif "add")    | LocationInfo for Borland C++ Builder and successors improved.                                                                                                                                                                                   |    |
+
+<a name="0.10.0"/>
+### Release 0.10.0 - 2008-04-03
+
+|                                                                     |                                                                                                                                                                                                |    |
+| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                                                                                                                                                        | By |
+| ![](images/fix.gif "fix")    | Several appenders fail to compile in Visual Studio 2008 Fixes [LOGCXX-259](https://issues.apache.org/jira/browse/LOGCXX-259).                                                                  |    |
+| ![](images/fix.gif "fix")    | unable to build from make dist package due to missing doxygen file Fixes [LOGCXX-258](https://issues.apache.org/jira/browse/LOGCXX-258).                                                       |    |
+| ![](images/fix.gif "fix")    | ServerSocket::accept hangs on Unix Fixes [LOGCXX-257](https://issues.apache.org/jira/browse/LOGCXX-257).                                                                                       |    |
+| ![](images/fix.gif "fix")    | SocketHubAppender fails after accepting connection Fixes [LOGCXX-256](https://issues.apache.org/jira/browse/LOGCXX-256).                                                                       |    |
+| ![](images/add.gif "add")    | Add build option for static C RTL Fixes [LOGCXX-254](https://issues.apache.org/jira/browse/LOGCXX-254).                                                                                        |    |
+| ![](images/fix.gif "fix")    | Transcoder compilation error with utf-8 charset Fixes [LOGCXX-253](https://issues.apache.org/jira/browse/LOGCXX-253).                                                                          |    |
+| ![](images/add.gif "add")    | Add documentation for use of operator\<\< in logging requests Fixes [LOGCXX-252](https://issues.apache.org/jira/browse/LOGCXX-252).                                                            |    |
+| ![](images/fix.gif "fix")    | NDC::cloneStack and NDC::inherit missing in 0.10.0 RC2 Fixes [LOGCXX-251](https://issues.apache.org/jira/browse/LOGCXX-251).                                                                   |    |
+| ![](images/fix.gif "fix")    | ODBCAppender has unicode issues Fixes [LOGCXX-248](https://issues.apache.org/jira/browse/LOGCXX-248).                                                                                          |    |
+| ![](images/fix.gif "fix")    | MSVC project has wrong additional include directories Fixes [LOGCXX-247](https://issues.apache.org/jira/browse/LOGCXX-247).                                                                    |    |
+| ![](images/fix.gif "fix")    | Config refresh hangs a client application that uses TelnetAppender Fixes [LOGCXX-246](https://issues.apache.org/jira/browse/LOGCXX-246).                                                       |    |
+| ![](images/fix.gif "fix")    | Problem Compile in Doxy Fixes [LOGCXX-243](https://issues.apache.org/jira/browse/LOGCXX-243).                                                                                                  |    |
+| ![](images/update.gif "update") | Eliminate log4cxx proxies for APR types Fixes [LOGCXX-242](https://issues.apache.org/jira/browse/LOGCXX-242).                                                                                  |    |
+| ![](images/fix.gif "fix")    | Non-ascii named files have names mangled Fixes [LOGCXX-241](https://issues.apache.org/jira/browse/LOGCXX-241).                                                                                 |    |
+| ![](images/update.gif "update") | Inconsistent const qualification on logging methods. Fixes [LOGCXX-239](https://issues.apache.org/jira/browse/LOGCXX-239).                                                                     |    |
+| ![](images/fix.gif "fix")    | Include missing headers Fixes [LOGCXX-237](https://issues.apache.org/jira/browse/LOGCXX-237).                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Re-order constructor initialiser lists to match declaration order Fixes [LOGCXX-236](https://issues.apache.org/jira/browse/LOGCXX-236).                                                        |    |
+| ![](images/add.gif "add")    | Add ObjectPtrT::exchange Fixes [LOGCXX-235](https://issues.apache.org/jira/browse/LOGCXX-235).                                                                                                 |    |
+| ![](images/fix.gif "fix")    | Assignment operator removes const qualifier Fixes [LOGCXX-234](https://issues.apache.org/jira/browse/LOGCXX-234).                                                                              |    |
+| ![](images/update.gif "update") | Unnecessary casts in ObjectPtrT Fixes [LOGCXX-233](https://issues.apache.org/jira/browse/LOGCXX-233).                                                                                          |    |
+| ![](images/update.gif "update") | Drop src/performance Fixes [LOGCXX-232](https://issues.apache.org/jira/browse/LOGCXX-232).                                                                                                     |    |
+| ![](images/fix.gif "fix")    | Deadlock in AsyncAppender Fixes [LOGCXX-231](https://issues.apache.org/jira/browse/LOGCXX-231).                                                                                                |    |
+| ![](images/update.gif "update") | Align ant build options with automake Fixes [LOGCXX-230](https://issues.apache.org/jira/browse/LOGCXX-230).                                                                                    |    |
+| ![](images/update.gif "update") | Remove @author tags Fixes [LOGCXX-228](https://issues.apache.org/jira/browse/LOGCXX-228).                                                                                                      |    |
+| ![](images/update.gif "update") | Remove @since tags Fixes [LOGCXX-227](https://issues.apache.org/jira/browse/LOGCXX-227).                                                                                                       |    |
+| ![](images/update.gif "update") | Default configurator uses \*.properties in preference to \*.xml Fixes [LOGCXX-226](https://issues.apache.org/jira/browse/LOGCXX-226).                                                          |    |
+| ![](images/update.gif "update") | Migrate unit tests from LGPL'd CPPUNIT to an ASL'd testing framework Fixes [LOGCXX-225](https://issues.apache.org/jira/browse/LOGCXX-225).                                                     |    |
+| ![](images/fix.gif "fix")    | trunk compile error. Fixes [LOGCXX-222](https://issues.apache.org/jira/browse/LOGCXX-222).                                                                                                     |    |
+| ![](images/fix.gif "fix")    | ThreadID layout does not match debugger Fixes [LOGCXX-221](https://issues.apache.org/jira/browse/LOGCXX-221).                                                                                  |    |
+| ![](images/fix.gif "fix")    | Memory leaks when using MFC Fixes [LOGCXX-220](https://issues.apache.org/jira/browse/LOGCXX-220).                                                                                              |    |
+| ![](images/fix.gif "fix")    | suspicious warnings Fixes [LOGCXX-219](https://issues.apache.org/jira/browse/LOGCXX-219).                                                                                                      |    |
+| ![](images/add.gif "add")    | Visual Studio 8 build Fixes [LOGCXX-218](https://issues.apache.org/jira/browse/LOGCXX-218).                                                                                                    |    |
+| ![](images/fix.gif "fix")    | Not initialized LoggerPtr segfault program. Fixes [LOGCXX-217](https://issues.apache.org/jira/browse/LOGCXX-217).                                                                              |    |
+| ![](images/fix.gif "fix")    | crash on program exit Fixes [LOGCXX-216](https://issues.apache.org/jira/browse/LOGCXX-216).                                                                                                    |    |
+| ![](images/update.gif "update") | Eliminate sqlext.h from odbcappender.h Fixes [LOGCXX-215](https://issues.apache.org/jira/browse/LOGCXX-215).                                                                                   |    |
+| ![](images/fix.gif "fix")    | Possible memory leak due to fault in build process (via make) Fixes [LOGCXX-214](https://issues.apache.org/jira/browse/LOGCXX-214).                                                            |    |
+| ![](images/fix.gif "fix")    | trace method implementation is missing Fixes [LOGCXX-213](https://issues.apache.org/jira/browse/LOGCXX-213).                                                                                   |    |
+| ![](images/fix.gif "fix")    | unittest failed Fixes [LOGCXX-212](https://issues.apache.org/jira/browse/LOGCXX-212).                                                                                                          |    |
+| ![](images/fix.gif "fix")    | Crash(Segmentation Fault) in DailyRollingFileAppender when file change Fixes [LOGCXX-211](https://issues.apache.org/jira/browse/LOGCXX-211).                                                   |    |
+| ![](images/fix.gif "fix")    | HTMLLayout NDC null check Fixes [LOGCXX-210](https://issues.apache.org/jira/browse/LOGCXX-210).                                                                                                |    |
+| ![](images/fix.gif "fix")    | A message of type wchar\_t\* is not beeing written correctly to the internal message buffer (Revision: 592627) Fixes [LOGCXX-209](https://issues.apache.org/jira/browse/LOGCXX-209).           |    |
+| ![](images/fix.gif "fix")    | isTraceEnabled implemenation missing in logger.cpp (Revision: 592627) Fixes [LOGCXX-208](https://issues.apache.org/jira/browse/LOGCXX-208).                                                    |    |
+| ![](images/fix.gif "fix")    | PatternParserTestCase and FileNamePatternTestCase fail only with VC6 Fixes [LOGCXX-204](https://issues.apache.org/jira/browse/LOGCXX-204).                                                     |    |
+| ![](images/fix.gif "fix")    | ObjectPtrT has inconsistent const-ness on accessors Fixes [LOGCXX-202](https://issues.apache.org/jira/browse/LOGCXX-202).                                                                      |    |
+| ![](images/add.gif "add")    | Visual Studio 6 build Fixes [LOGCXX-201](https://issues.apache.org/jira/browse/LOGCXX-201).                                                                                                    |    |
+| ![](images/add.gif "add")    | Implement compression for RollingFileAppender Fixes [LOGCXX-200](https://issues.apache.org/jira/browse/LOGCXX-200).                                                                            |    |
+| ![](images/fix.gif "fix")    | ant can't generate vc6 project Fixes [LOGCXX-197](https://issues.apache.org/jira/browse/LOGCXX-197).                                                                                           |    |
+| ![](images/fix.gif "fix")    | Syslog appender destructor can cause core Fixes [LOGCXX-196](https://issues.apache.org/jira/browse/LOGCXX-196).                                                                                |    |
+| ![](images/fix.gif "fix")    | Syslog appender adds characters to output. Fixes [LOGCXX-195](https://issues.apache.org/jira/browse/LOGCXX-195).                                                                               |    |
+| ![](images/fix.gif "fix")    | Garbage in log files when appenders are defined in multiple levels of the logger hierarchy Fixes [LOGCXX-194](https://issues.apache.org/jira/browse/LOGCXX-194).                               |    |
+| ![](images/update.gif "update") | Please rename or remove new local variable "buf" in Logger.h macros Fixes [LOGCXX-193](https://issues.apache.org/jira/browse/LOGCXX-193).                                                      |    |
+| ![](images/update.gif "update") | Suggested improvements to log4cxx webpages Fixes [LOGCXX-192](https://issues.apache.org/jira/browse/LOGCXX-192).                                                                               |    |
+| ![](images/fix.gif "fix")    | Application cores when syslog appender is given an unreachable host/ip. Fixes [LOGCXX-191](https://issues.apache.org/jira/browse/LOGCXX-191).                                                  |    |
+| ![](images/fix.gif "fix")    | The 'logger.h' header includes itself. Fixes [LOGCXX-190](https://issues.apache.org/jira/browse/LOGCXX-190).                                                                                   |    |
+| ![](images/update.gif "update") | Migrate to Maven 2.0 for documentation and packaging Fixes [LOGCXX-189](https://issues.apache.org/jira/browse/LOGCXX-189).                                                                     |    |
+| ![](images/update.gif "update") | Upgrade to apr 1.2.9 and apr-util 1.2.8 Fixes [LOGCXX-188](https://issues.apache.org/jira/browse/LOGCXX-188).                                                                                  |    |
+| ![](images/fix.gif "fix")    | LogLog::emit() could potentially interleave messages Fixes [LOGCXX-187](https://issues.apache.org/jira/browse/LOGCXX-187).                                                                     |    |
+| ![](images/fix.gif "fix")    | Garbage characters in log files when log requests from multiple threads with hyperthreading enabled Fixes [LOGCXX-186](https://issues.apache.org/jira/browse/LOGCXX-186).                      |    |
+| ![](images/fix.gif "fix")    | Crash when log level set to 'inherited' Fixes [LOGCXX-184](https://issues.apache.org/jira/browse/LOGCXX-184).                                                                                  |    |
+| ![](images/fix.gif "fix")    | Compiler warning: dereferencing type-punned pointer will break strict-aliasing rules Fixes [LOGCXX-183](https://issues.apache.org/jira/browse/LOGCXX-183).                                     |    |
+| ![](images/fix.gif "fix")    | missing man page for simplesocketserver Fixes [LOGCXX-182](https://issues.apache.org/jira/browse/LOGCXX-182).                                                                                  |    |
+| ![](images/fix.gif "fix")    | Level::DEBUG and other non-local statics cause crash on app shutdown on AIX Fixes [LOGCXX-181](https://issues.apache.org/jira/browse/LOGCXX-181).                                              |    |
+| ![](images/fix.gif "fix")    | Build fails at domconfigurator.h Fixes [LOGCXX-180](https://issues.apache.org/jira/browse/LOGCXX-180).                                                                                         |    |
+| ![](images/add.gif "add")    | example applications do SIGABRT on aix 5.2 Fixes [LOGCXX-179](https://issues.apache.org/jira/browse/LOGCXX-179).                                                                               |    |
+| ![](images/fix.gif "fix")    | Link failure if wchar\_t cannot be determined as UTF-16 or UTF-32 Fixes [LOGCXX-178](https://issues.apache.org/jira/browse/LOGCXX-178).                                                        |    |
+| ![](images/fix.gif "fix")    | SocketImpl::accept uses private APR function: apr\_wait\_for\_io\_or\_timeout Fixes [LOGCXX-177](https://issues.apache.org/jira/browse/LOGCXX-177).                                            |    |
+| ![](images/fix.gif "fix")    | APRCharsetEncoder is not thread safe Fixes [LOGCXX-175](https://issues.apache.org/jira/browse/LOGCXX-175).                                                                                     |    |
+| ![](images/fix.gif "fix")    | configure fail with ".infig.status: error: cannot find input file:" Fixes [LOGCXX-172](https://issues.apache.org/jira/browse/LOGCXX-172).                                                      |    |
+| ![](images/add.gif "add")    | Add project description file for projects.apache.org Fixes [LOGCXX-171](https://issues.apache.org/jira/browse/LOGCXX-171).                                                                     |    |
+| ![](images/fix.gif "fix")    | XMLLayoutTestCase fails on compilers that do not provide location info Fixes [LOGCXX-169](https://issues.apache.org/jira/browse/LOGCXX-169).                                                   |    |
+| ![](images/fix.gif "fix")    | log4j.dtd does not contain rollingPolicy and other o.a.l.r.RFA elements Fixes [LOGCXX-168](https://issues.apache.org/jira/browse/LOGCXX-168).                                                  |    |
+| ![](images/fix.gif "fix")    | system locale charmap is not determined properly on Fedora Core 6 Fixes [LOGCXX-167](https://issues.apache.org/jira/browse/LOGCXX-167).                                                        |    |
+| ![](images/fix.gif "fix")    | XMLSocketAppender may generate erroneous output due to mismatched encoding Fixes [LOGCXX-165](https://issues.apache.org/jira/browse/LOGCXX-165).                                               |    |
+| ![](images/fix.gif "fix")    | XMLSocketAppender is disabled Fixes [LOGCXX-164](https://issues.apache.org/jira/browse/LOGCXX-164).                                                                                            |    |
+| ![](images/fix.gif "fix")    | liblog4cxx (svn 480882) does not link on Mac OS X 10.4 Fixes [LOGCXX-163](https://issues.apache.org/jira/browse/LOGCXX-163).                                                                   |    |
+| ![](images/fix.gif "fix")    | Problem printing string with embedded NULL character Fixes [LOGCXX-162](https://issues.apache.org/jira/browse/LOGCXX-162).                                                                     |    |
+| ![](images/fix.gif "fix")    | Using RollingFileAppender increases the working set with each rollover Fixes [LOGCXX-161](https://issues.apache.org/jira/browse/LOGCXX-161).                                                   |    |
+| ![](images/fix.gif "fix")    | helpers/object.h: DECLARE\_LOG4CXX\_OBJECT macro definition is missing virtual destructor declaration Fixes [LOGCXX-160](https://issues.apache.org/jira/browse/LOGCXX-160).                    |    |
+| ![](images/fix.gif "fix")    | Initialization of local static objects out of order on Linux Fixes [LOGCXX-159](https://issues.apache.org/jira/browse/LOGCXX-159).                                                             |    |
+| ![](images/fix.gif "fix")    | tolower not defined in stringhelper.cpp Fixes [LOGCXX-158](https://issues.apache.org/jira/browse/LOGCXX-158).                                                                                  |    |
+| ![](images/fix.gif "fix")    | make install fails since @manual\_dest@ replacement is missing in Makefiles Fixes [LOGCXX-157](https://issues.apache.org/jira/browse/LOGCXX-157).                                              |    |
+| ![](images/update.gif "update") | immediate flush in console appender Fixes [LOGCXX-156](https://issues.apache.org/jira/browse/LOGCXX-156).                                                                                      |    |
+| ![](images/update.gif "update") | Update source headers per new ASF header policy Fixes [LOGCXX-155](https://issues.apache.org/jira/browse/LOGCXX-155).                                                                          |    |
+| ![](images/add.gif "add")    | Automate log4cxx site and doxygen generation and deployment Fixes [LOGCXX-153](https://issues.apache.org/jira/browse/LOGCXX-153).                                                              |    |
+| ![](images/fix.gif "fix")    | gcc warning about cast from \`const void\*' to \`log4cxx::helpers::Object\*' discards qualifiers from pointer target typ Fixes [LOGCXX-152](https://issues.apache.org/jira/browse/LOGCXX-152). |    |
+| ![](images/fix.gif "fix")    | Umlauts as literal in patternlayout won't be logged correct Fixes [LOGCXX-151](https://issues.apache.org/jira/browse/LOGCXX-151).                                                              |    |
+| ![](images/fix.gif "fix")    | logstream's operator\<\< declared in the wrong namespace Fixes [LOGCXX-150](https://issues.apache.org/jira/browse/LOGCXX-150).                                                                 |    |
+| ![](images/fix.gif "fix")    | make dist does not work Fixes [LOGCXX-149](https://issues.apache.org/jira/browse/LOGCXX-149).                                                                                                  |    |
+| ![](images/fix.gif "fix")    | DailyRollingFileAppender::~DailyRollingFileAppender must call finalize Fixes [LOGCXX-146](https://issues.apache.org/jira/browse/LOGCXX-146).                                                  |    |
+| ![](images/fix.gif "fix")    | \-xarch=v8plus should be removed from Makefile.in Fixes [LOGCXX-143](https://issues.apache.org/jira/browse/LOGCXX-143).                                                                        |    |
+| ![](images/fix.gif "fix")    | socketservertestcase.cpp does not compile with Sun Studio 11 on Solaris Fixes [LOGCXX-142](https://issues.apache.org/jira/browse/LOGCXX-142).                                                  |    |
+| ![](images/update.gif "update") | Upgrade to APR 1.2.7 or later Fixes [LOGCXX-141](https://issues.apache.org/jira/browse/LOGCXX-141).                                                                                            |    |
+| ![](images/fix.gif "fix")    | Handle leak with LoggingEvent::getCurrentThreadName Fixes [LOGCXX-140](https://issues.apache.org/jira/browse/LOGCXX-140).                                                                      |    |
+| ![](images/fix.gif "fix")    | XMLLayoutTestCase uses inadequate filters for 64 bit platforms Fixes [LOGCXX-139](https://issues.apache.org/jira/browse/LOGCXX-139).                                                           |    |
+| ![](images/fix.gif "fix")    | XMLLayoutTestCase output and filtered output gets overwritten Fixes [LOGCXX-138](https://issues.apache.org/jira/browse/LOGCXX-138).                                                            |    |
+| ![](images/fix.gif "fix")    | DailyRollingFileAppender not using Property options Fixes [LOGCXX-136](https://issues.apache.org/jira/browse/LOGCXX-136).                                                                      |    |
+| ![](images/update.gif "update") | Use std::string with logstream Fixes [LOGCXX-135](https://issues.apache.org/jira/browse/LOGCXX-135).                                                                                           |    |
+| ![](images/fix.gif "fix")    | FileAppender could create missing directories Fixes [LOGCXX-134](https://issues.apache.org/jira/browse/LOGCXX-134).                                                                            |    |
+| ![](images/fix.gif "fix")    | Missing parenthesis in LOG4CXX\_ASSERT Fixes [LOGCXX-133](https://issues.apache.org/jira/browse/LOGCXX-133).                                                                                   |    |
+| ![](images/fix.gif "fix")    | various segmentation faults in multithreaded application Fixes [LOGCXX-132](https://issues.apache.org/jira/browse/LOGCXX-132).                                                                 |    |
+| ![](images/fix.gif "fix")    | TimeBasedRollingPolicy is declared "abstract" Fixes [LOGCXX-131](https://issues.apache.org/jira/browse/LOGCXX-131).                                                                            |    |
+| ![](images/fix.gif "fix")    | Compile fails on gcc4.1 Fixes [LOGCXX-130](https://issues.apache.org/jira/browse/LOGCXX-130).                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Asyncappender is full of race conditions (improper use of condition variables) Fixes [LOGCXX-129](https://issues.apache.org/jira/browse/LOGCXX-129).                                           |    |
+| ![](images/fix.gif "fix")    | Main build.xml not referencing "env" properly. Fixes [LOGCXX-127](https://issues.apache.org/jira/browse/LOGCXX-127).                                                                           |    |
+| ![](images/fix.gif "fix")    | std::cout stops working if log4cxx is first to output Fixes [LOGCXX-126](https://issues.apache.org/jira/browse/LOGCXX-126).                                                                    |    |
+| ![](images/update.gif "update") | L7dTestCase is stubbed out Fixes [LOGCXX-125](https://issues.apache.org/jira/browse/LOGCXX-125).                                                                                               |    |
+| ![](images/fix.gif "fix")    | wchar\_t constructor missing in class NDC Fixes [LOGCXX-124](https://issues.apache.org/jira/browse/LOGCXX-124).                                                                                |    |
+| ![](images/fix.gif "fix")    | UTF-8 build fails on Linux Fixes [LOGCXX-123](https://issues.apache.org/jira/browse/LOGCXX-123).                                                                                               |    |
+| ![](images/fix.gif "fix")    | Wrong parameter description in Patternlayout Fixes [LOGCXX-120](https://issues.apache.org/jira/browse/LOGCXX-120).                                                                             |    |
+| ![](images/fix.gif "fix")    | ndctestcase not working Fixes [LOGCXX-119](https://issues.apache.org/jira/browse/LOGCXX-119).                                                                                                  |    |
+| ![](images/fix.gif "fix")    | Hierarchy corrupts with PropertyConfigurator Fixes [LOGCXX-118](https://issues.apache.org/jira/browse/LOGCXX-118).                                                                             |    |
+| ![](images/fix.gif "fix")    | Memory leak with ThreadSpecificData on Win32 Fixes [LOGCXX-117](https://issues.apache.org/jira/browse/LOGCXX-117).                                                                             |    |
+| ![](images/fix.gif "fix")    | SVN head does not compiler with MinGW compiler Fixes [LOGCXX-116](https://issues.apache.org/jira/browse/LOGCXX-116).                                                                           |    |
+| ![](images/fix.gif "fix")    | SVN head does not compile with Borland C++ compiler Fixes [LOGCXX-115](https://issues.apache.org/jira/browse/LOGCXX-115).                                                                      |    |
+| ![](images/update.gif "update") | Upgrade APR to 1.2.2 from 1.1.0 Fixes [LOGCXX-114](https://issues.apache.org/jira/browse/LOGCXX-114).                                                                                          |    |
+| ![](images/update.gif "update") | separate apr detection m4 codes from aclocal.m4 Fixes [LOGCXX-113](https://issues.apache.org/jira/browse/LOGCXX-113).                                                                          |    |
+| ![](images/update.gif "update") | change "static" to "auto" for Transcoder::decode() decoder and CharsetDecoder::getDefaultDecoder() decoder Fixes [LOGCXX-112](https://issues.apache.org/jira/browse/LOGCXX-112).               |    |
+| ![](images/update.gif "update") | make Logger cache a LoggerRepositoryPtr instead of a "blind" pointer Fixes [LOGCXX-111](https://issues.apache.org/jira/browse/LOGCXX-111).                                                     |    |
+| ![](images/fix.gif "fix")    | try fix 64bit log4cxx\_intptr\_t Fixes [LOGCXX-110](https://issues.apache.org/jira/browse/LOGCXX-110).                                                                                         |    |
+| ![](images/fix.gif "fix")    | Can't compile log4cxx in ascii on Windows Fixes [LOGCXX-107](https://issues.apache.org/jira/browse/LOGCXX-107).                                                                                |    |
+| ![](images/fix.gif "fix")    | maxFileSize has bad type in SizeBasedTriggeringPolicy file Fixes [LOGCXX-106](https://issues.apache.org/jira/browse/LOGCXX-106).                                                               |    |
+| ![](images/fix.gif "fix")    | Infinite loop in string replacing Fixes [LOGCXX-105](https://issues.apache.org/jira/browse/LOGCXX-105).                                                                                        |    |
+| ![](images/fix.gif "fix")    | ODBCAppender::close does not check if appender is already closed Fixes [LOGCXX-104](https://issues.apache.org/jira/browse/LOGCXX-104).                                                         |    |
+| ![](images/update.gif "update") | Much of CVS HEAD seems \#if 0 out, especially ResourceBundle stuff Fixes [LOGCXX-103](https://issues.apache.org/jira/browse/LOGCXX-103).                                                       |    |
+| ![](images/fix.gif "fix")    | Fixes for ODBCAppender Fixes [LOGCXX-100](https://issues.apache.org/jira/browse/LOGCXX-100).                                                                                                   |    |
+| ![](images/fix.gif "fix")    | Gump build fails for log4cxx-ant-no-wchar-t target Fixes [LOGCXX-98](https://issues.apache.org/jira/browse/LOGCXX-98).                                                                         |    |
+| ![](images/update.gif "update") | simplesocketserver.cpp should use LOG4CXX\_STR("...") not L"..." Fixes [LOGCXX-94](https://issues.apache.org/jira/browse/LOGCXX-94).                                                           |    |
+| ![](images/update.gif "update") | Explore use of security-enhanced CRT methods Fixes [LOGCXX-88](https://issues.apache.org/jira/browse/LOGCXX-88).                                                                               |    |
+| ![](images/update.gif "update") | Remove remaining uses of Category and Priority Fixes [LOGCXX-87](https://issues.apache.org/jira/browse/LOGCXX-87).                                                                             |    |
+| ![](images/add.gif "add")    | Add TRACE level Fixes [LOGCXX-86](https://issues.apache.org/jira/browse/LOGCXX-86).                                                                                                            |    |
+| ![](images/update.gif "update") | Mac OS/X fixes and enhancements Fixes [LOGCXX-85](https://issues.apache.org/jira/browse/LOGCXX-85).                                                                                            |    |
+| ![](images/fix.gif "fix")    | Problems with stream logging in UTF8, no WCHAR\_T build Fixes [LOGCXX-84](https://issues.apache.org/jira/browse/LOGCXX-84).                                                                    |    |
+| ![](images/fix.gif "fix")    | log4cxx::Level::ERROR fails to compile when GDI enabled Fixes [LOGCXX-83](https://issues.apache.org/jira/browse/LOGCXX-83).                                                                    |    |
+| ![](images/fix.gif "fix")    | Compiling with stream.h in multiple object files errors Fixes [LOGCXX-82](https://issues.apache.org/jira/browse/LOGCXX-82).                                                                    |    |
+| ![](images/fix.gif "fix")    | SimpleDateFormat does not compile on Solaris 2.95.2 gcc Fixes [LOGCXX-81](https://issues.apache.org/jira/browse/LOGCXX-81).                                                                    |    |
+| ![](images/update.gif "update") | Migrated network appenders to APR network IO Fixes [LOGCXX-80](https://issues.apache.org/jira/browse/LOGCXX-80).                                                                               |    |
+| ![](images/update.gif "update") | configure check for apr-util Fixes [LOGCXX-79](https://issues.apache.org/jira/browse/LOGCXX-79).                                                                                               |    |
+| ![](images/fix.gif "fix")    | Static builds broken Fixes [LOGCXX-77](https://issues.apache.org/jira/browse/LOGCXX-77).                                                                                                       |    |
+| ![](images/add.gif "add")    | user.home, user.dir, java.io.tmpdir available within configuration files Fixes [LOGCXX-76](https://issues.apache.org/jira/browse/LOGCXX-76).                                                   |    |
+| ![](images/add.gif "add")    | Cygwin build Fixes [LOGCXX-75](https://issues.apache.org/jira/browse/LOGCXX-75).                                                                                                               |    |
+| ![](images/add.gif "add")    | MinGW build Fixes [LOGCXX-74](https://issues.apache.org/jira/browse/LOGCXX-74).                                                                                                                |    |
+| ![](images/fix.gif "fix")    | Not loading configuration from log4cxx.properties or log4cxx.xml Fixes [LOGCXX-73](https://issues.apache.org/jira/browse/LOGCXX-73).                                                           |    |
+| ![](images/update.gif "update") | INSTALL out of date Fixes [LOGCXX-72](https://issues.apache.org/jira/browse/LOGCXX-72).                                                                                                        |    |
+| ![](images/update.gif "update") | Update performance page on web site Fixes [LOGCXX-71](https://issues.apache.org/jira/browse/LOGCXX-71).                                                                                        |    |
+| ![](images/fix.gif "fix")    | Logic flaws in StringHelper::startsWith and StringHelper::endsWith Fixes [LOGCXX-70](https://issues.apache.org/jira/browse/LOGCXX-70).                                                         |    |
+| ![](images/fix.gif "fix")    | NTEventLogAppender always uses RPC method for logging and has inadequate error handling. Fixes [LOGCXX-67](https://issues.apache.org/jira/browse/LOGCXX-67).                                   |    |
+| ![](images/fix.gif "fix")    | SyslogAppender append method currently stubbed out Fixes [LOGCXX-66](https://issues.apache.org/jira/browse/LOGCXX-66).                                                                         |    |
+| ![](images/update.gif "update") | Migrate to APR network IO Fixes [LOGCXX-64](https://issues.apache.org/jira/browse/LOGCXX-64).                                                                                                  |    |
+| ![](images/update.gif "update") | Platform appropriate line-feed convention Fixes [LOGCXX-63](https://issues.apache.org/jira/browse/LOGCXX-63).                                                                                  |    |
+| ![](images/update.gif "update") | log4cxx 0.10.0 release Fixes [LOGCXX-62](https://issues.apache.org/jira/browse/LOGCXX-62).                                                                                                     |    |
+| ![](images/fix.gif "fix")    | XML layout can be mismatched with document encoding Fixes [LOGCXX-60](https://issues.apache.org/jira/browse/LOGCXX-60).                                                                        |    |
+| ![](images/update.gif "update") | Implement encoding support for Writer appender Fixes [LOGCXX-59](https://issues.apache.org/jira/browse/LOGCXX-59).                                                                             |    |
+| ![](images/fix.gif "fix")    | ImmediateFlush'd FileAppenders extremely slow on Windows Fixes [LOGCXX-58](https://issues.apache.org/jira/browse/LOGCXX-58).                                                                   |    |
+| ![](images/add.gif "add")    | Port log4j performance test Fixes [LOGCXX-57](https://issues.apache.org/jira/browse/LOGCXX-57).                                                                                                |    |
+| ![](images/fix.gif "fix")    | BasicConfiguration is unreliable Fixes [LOGCXX-56](https://issues.apache.org/jira/browse/LOGCXX-56).                                                                                           |    |
+| ![](images/add.gif "add")    | DailyRolling File Appender Fixes [LOGCXX-55](https://issues.apache.org/jira/browse/LOGCXX-55).                                                                                                 |    |
+| ![](images/fix.gif "fix")    | Eliminate use of boost-regex in unit tests Fixes [LOGCXX-54](https://issues.apache.org/jira/browse/LOGCXX-54).                                                                                 |    |
+| ![](images/fix.gif "fix")    | Problems compiling with MsDev 6.0 (space in paths) Fixes [LOGCXX-53](https://issues.apache.org/jira/browse/LOGCXX-53).                                                                         |    |
+| ![](images/add.gif "add")    | Migrate log4j 1.3 RollingFileAppender Fixes [LOGCXX-52](https://issues.apache.org/jira/browse/LOGCXX-52).                                                                                      |    |
+| ![](images/fix.gif "fix")    | variable name clash in macro Fixes [LOGCXX-50](https://issues.apache.org/jira/browse/LOGCXX-50).                                                                                               |    |
+| ![](images/add.gif "add")    | Move timezone specification into pattern, remove locale specification Fixes [LOGCXX-49](https://issues.apache.org/jira/browse/LOGCXX-49).                                                      |    |
+| ![](images/add.gif "add")    | Use hex representation for thread identifier Fixes [LOGCXX-48](https://issues.apache.org/jira/browse/LOGCXX-48).                                                                               |    |
+| ![](images/fix.gif "fix")    | Check headers for missing declarations and Effective C++ violations Fixes [LOGCXX-47](https://issues.apache.org/jira/browse/LOGCXX-47).                                                        |    |
+| ![](images/fix.gif "fix")    | Extra semicolon after namespace closing paren Fixes [LOGCXX-46](https://issues.apache.org/jira/browse/LOGCXX-46).                                                                              |    |
+| ![](images/fix.gif "fix")    | \_T causes error : 1048576 cannot be used as a function Fixes [LOGCXX-45](https://issues.apache.org/jira/browse/LOGCXX-45).                                                                    |    |
+| ![](images/add.gif "add")    | GUMP integation Fixes [LOGCXX-44](https://issues.apache.org/jira/browse/LOGCXX-44).                                                                                                            |    |
+| ![](images/add.gif "add")    | configure/make help needed Fixes [LOGCXX-43](https://issues.apache.org/jira/browse/LOGCXX-43).                                                                                                 |    |
+| ![](images/fix.gif "fix")    | Layout timestamp doesn't seem to adjust for daylight saving Fixes [LOGCXX-41](https://issues.apache.org/jira/browse/LOGCXX-41).                                                                |    |
+| ![](images/fix.gif "fix")    | PatternLayout does not support Java date format specifiers Fixes [LOGCXX-40](https://issues.apache.org/jira/browse/LOGCXX-40).                                                                 |    |
+| ![](Pictures/100002000000001400000014836C96AED584EDBB.gif "remove") | Remove DailyRollingFileAppender Fixes [LOGCXX-39](https://issues.apache.org/jira/browse/LOGCXX-39).                                                                                            |    |
+| ![](images/fix.gif "fix")    | Unable to build log4cxx under Borland C++ Fixes [LOGCXX-37](https://issues.apache.org/jira/browse/LOGCXX-37).                                                                                  |    |
+| ![](images/add.gif "add")    | Migrate to Apache Portable Runtime threads Fixes [LOGCXX-36](https://issues.apache.org/jira/browse/LOGCXX-36).                                                                                 |    |
+| ![](Pictures/100002000000001400000014836C96AED584EDBB.gif "remove") | Avoid use of MSXML Fixes [LOGCXX-35](https://issues.apache.org/jira/browse/LOGCXX-35).                                                                                                         |    |
+| ![](images/fix.gif "fix")    | Visual Studio 6 CVS build broken Fixes [LOGCXX-34](https://issues.apache.org/jira/browse/LOGCXX-34).                                                                                           |    |
+| ![](images/fix.gif "fix")    | log4cxx::Exception is not derived from std::exception Fixes [LOGCXX-33](https://issues.apache.org/jira/browse/LOGCXX-33).                                                                      |    |
+| ![](images/fix.gif "fix")    | Missing copy constructors and assignment operators Fixes [LOGCXX-32](https://issues.apache.org/jira/browse/LOGCXX-32).                                                                         |    |
+| ![](images/fix.gif "fix")    | Missing const qualifiers, Exception::getMessage() in particular. Fixes [LOGCXX-31](https://issues.apache.org/jira/browse/LOGCXX-31).                                                           |    |
+| ![](images/fix.gif "fix")    | StringTokenizer uses evil strtok and wcstok functions Fixes [LOGCXX-30](https://issues.apache.org/jira/browse/LOGCXX-30).                                                                      |    |
+| ![](images/fix.gif "fix")    | Appender attributes are not passed passed to setOption correctly. Fixes [LOGCXX-29](https://issues.apache.org/jira/browse/LOGCXX-29).                                                          |    |
+| ![](images/fix.gif "fix")    | Appender threshold cannot be set in configuration files Fixes [LOGCXX-28](https://issues.apache.org/jira/browse/LOGCXX-28).                                                                    |    |
+| ![](images/fix.gif "fix")    | Appender threshold cannot be set in configuration files Fixes [LOGCXX-27](https://issues.apache.org/jira/browse/LOGCXX-27).                                                                    |    |
+| ![](images/fix.gif "fix")    | Default initialization is broken Fixes [LOGCXX-26](https://issues.apache.org/jira/browse/LOGCXX-26).                                                                                           |    |
+| ![](images/add.gif "add")    | Add Ant+cpptasks build file Fixes [LOGCXX-25](https://issues.apache.org/jira/browse/LOGCXX-25).                                                                                                |    |
+| ![](images/fix.gif "fix")    | Class and module name not available in LogEvent Fixes [LOGCXX-24](https://issues.apache.org/jira/browse/LOGCXX-24).                                                                            |    |
+| ![](images/fix.gif "fix")    | Unit tests have become stale Fixes [LOGCXX-23](https://issues.apache.org/jira/browse/LOGCXX-23).                                                                                               |    |
+| ![](images/fix.gif "fix")    | Backslashes in filenames in XML config of FileAppender broken Fixes [LOGCXX-22](https://issues.apache.org/jira/browse/LOGCXX-22).                                                              |    |
+| ![](images/add.gif "add")    | Add check that libxml2 not libxml has been included Fixes [LOGCXX-21](https://issues.apache.org/jira/browse/LOGCXX-21).                                                                        |    |
+| ![](images/add.gif "add")    | Add .cvsignore's to ignore generated files Fixes [LOGCXX-19](https://issues.apache.org/jira/browse/LOGCXX-19).                                                                                 |    |
+| ![](images/add.gif "add")    | LoggerStream Feature Fixes [LOGCXX-18](https://issues.apache.org/jira/browse/LOGCXX-18).                                                                                                       |    |
+| ![](images/update.gif "update") | Use of non reentrant time functions Fixes [LOGCXX-17](https://issues.apache.org/jira/browse/LOGCXX-17).                                                                                        |    |
+| ![](images/fix.gif "fix")    | Misleading statements in Introduction to log4cxx Fixes [LOGCXX-16](https://issues.apache.org/jira/browse/LOGCXX-16).                                                                           |    |
+| ![](images/fix.gif "fix")    | PatternLayout don't use locale time zone,it's use GMT tome zone Fixes [LOGCXX-15](https://issues.apache.org/jira/browse/LOGCXX-15).                                                            |    |
+| ![](images/add.gif "add")    | add -Wall to compile log4cxx will get many warning Fixes [LOGCXX-14](https://issues.apache.org/jira/browse/LOGCXX-14).                                                                         |    |
+| ![](images/add.gif "add")    | Add branch optimization hint to LOG4CXX\_DEBUG macro Fixes [LOGCXX-13](https://issues.apache.org/jira/browse/LOGCXX-13).                                                                       |    |
+| ![](images/fix.gif "fix")    | the threshold of ApenderSkeleton can not be set by calling setOption. Fixes [LOGCXX-12](https://issues.apache.org/jira/browse/LOGCXX-12).                                                      |    |
+| ![](images/fix.gif "fix")    | Timezone may have side-effects Fixes [LOGCXX-11](https://issues.apache.org/jira/browse/LOGCXX-11).                                                                                             |    |
+| ![](images/fix.gif "fix")    | Conflicting definitions of tchar.h/simulatenous Unicode+MBCS Fixes [LOGCXX-10](https://issues.apache.org/jira/browse/LOGCXX-10).                                                               |    |
+| ![](images/fix.gif "fix")    | Compilation problems using VC5 or VC6 with later Platform SDKs Fixes [LOGCXX-8](https://issues.apache.org/jira/browse/LOGCXX-8).                                                               |    |
+| ![](images/fix.gif "fix")    | SocketAppender binary format not compatible with Chainsaw Fixes [LOGCXX-7](https://issues.apache.org/jira/browse/LOGCXX-7).                                                                    |    |
+| ![](images/add.gif "add")    | Win32 OutputDebugString Fixes [LOGCXX-6](https://issues.apache.org/jira/browse/LOGCXX-6).                                                                                                      |    |
+| ![](images/fix.gif "fix")    | Preprocessor macro WIN32 used instead of \_WIN32 Fixes [LOGCXX-5](https://issues.apache.org/jira/browse/LOGCXX-5).                                                                             |    |
+| ![](images/fix.gif "fix")    | initialization not working on many OS's Fixes [LOGCXX-4](https://issues.apache.org/jira/browse/LOGCXX-4).                                                                                      |    |
+| ![](images/fix.gif "fix")    | Missing \#else Fixes [LOGCXX-3](https://issues.apache.org/jira/browse/LOGCXX-3).                                                                                                               |    |
+| ![](images/fix.gif "fix")    | logger.h includes config.h Fixes [LOGCXX-2](https://issues.apache.org/jira/browse/LOGCXX-2).                                                                                                   |    |
+
+<a name="0.9.7"/>
+### Release 0.9.7 - 2004-05-10
+
+|                                                                  |                                                                                                                                                     |    |
+| ---------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                                                                                                             | By |
+| ![](images/fix.gif "fix") | Fixed examples source code in the "Short introduction to log4cxx".                                                                                  |    |
+| ![](images/fix.gif "fix") | Fixed, in the renaming algorithm of RollingFileAppender and DailyRollingFileAppender, a problem specific to Unicode.                                |    |
+| ![](images/fix.gif "fix") | Fixed conflict with Windows macros "min" and "max", by renaming StrictMath::min and StrictMath::max to StrictMath::minimum and StrictMath::maximum. |    |
+| ![](images/add.gif "add") | Port to HPUX 11.0.                                                                                                                                  |    |
+| ![](images/fix.gif "fix") | Fixed segmentation fault in PropertyConfigurator.                                                                                                   |    |
+| ![](images/add.gif "add") | Port to Solaris.                                                                                                                                    |    |
+| ![](images/fix.gif "fix") | Fixed MutexException thrown while destroying RollingFileAppender.                                                                                   |    |
+| ![](images/fix.gif "fix") | Logging macros can be used without explicity declaring the use of log4cxx namespace.                                                                |    |
+| ![](images/fix.gif "fix") | Fixed static library unresolved externals for msvc 6 and 7.1                                                                                        |    |
+
+<a name="0.9.6"/>
+### Release 0.9.6 - 2004-04-11
+
+|                                                                     |                                                                                                         |    |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                                                                 | By |
+| ![](images/update.gif "update") | Timezone management has been optimized through the class TimeZone                                       |    |
+| ![](images/update.gif "update") | Inter-thread synchronization and reference counting has been optimized                                  |    |
+| ![](images/update.gif "update") | Reference counting now uses gcc atomic functions (bug 929078)                                           |    |
+| ![](images/update.gif "update") | Use of StringBuffer has been optimized.                                                                 |    |
+| ![](images/add.gif "add")    | Support of localisation throug resourceBundles                                                          |    |
+| ![](images/update.gif "update") | SyslogAppender now uses the system function 'syslog' to log on the local host. (only for POSIX systems) |    |
+| ![](images/add.gif "add")    | Added TimeZone configuration to PatternLayout (bug 912563)                                              |    |
+| ![](images/add.gif "add")    | Support of the DailyRollingFileAppender (feature request 842765)                                        |    |
+
+<a name="0.9.5"/>
+### Release 0.9.5 - 2004-02-04
+
+|                                                                  |                                                                                                                            |    |
+| ---------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                                                                                    | By |
+| ![](images/add.gif "add") | Port of log4j Jnuit tests with Cppunit and Boost Regex.                                                                    |    |
+| ![](images/add.gif "add") | Added explicit exports for MSDEV 6 and MSDEV 7 (no further need of .def files)                                             |    |
+| ![](images/add.gif "add") | Custom levels can be configured through the DOMConfigurator and PropertyConfigurator classes (Level inherites from Object) |    |
+| ![](images/add.gif "add") | Added a reference counter to LoggingEvent to avoid useless copies (LoggingEvent inherites from Object)                     |    |
+| ![](images/add.gif "add") | The file log4j.xml as well as the file log4j.properties are now search for, in log4cxx initialization.                     |    |
+| ![](images/add.gif "add") | The root logger can be assigned the "OFF" level.                                                                           |    |
+| ![](images/add.gif "add") | Added MSVC6 project missing files mutext.cpp and condition.cpp (bug 847397)                                                |    |
+| ![](images/fix.gif "fix") | condition.cpp now compiles with MSVC6 (bug 847417)                                                                         |    |
+| ![](images/fix.gif "fix") | fixed pure virtual function call in PropertyConfigurator::configureAndWatch (bug 848521)                                   |    |
+| ![](images/fix.gif "fix") | XMLAppender now displays correct timestamp with MSVC 6 (bug 852836)                                                        |    |
+| ![](images/add.gif "add") | SRLPORT 4.6 support.                                                                                                       |    |
+| ![](images/fix.gif "fix") | Fixed an infinite loop in class Properties.                                                                                |    |
+| ![](images/fix.gif "fix") | Fixed compilations problems with unicode.                                                                                  |    |
+| ![](images/fix.gif "fix") | Fixed SocketAppender bug concerning MDC and NDC.                                                                           |    |
+
+<a name="0.9.4"/>
+### Release 0.9.4 - 2003-10-25
+
+|                                                                     |                                                           |    |
+| ------------------------------------------------------------------- | --------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                   | By |
+| ![](images/update.gif "update") | StringBuffer has been optimized.                          |    |
+| ![](images/fix.gif "fix")    | Fixed miscellaneous threading problems.                   |    |
+| ![](images/add.gif "add")    | Added TimeZone support in PatternLayout (bug 796894)      |    |
+| ![](images/fix.gif "fix")    | Fixed threading configuration problems (bug 809125)       |    |
+| ![](images/fix.gif "fix")    | Fixed miscellaneous MSVC and cygwin compilation problems. |    |
+
+<a name="0.9.3"/>
+### Release 0.9.3 - 2003-09-19
+
+|                                                                     |                                                                                 |    |
+| ------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                                         | By |
+| ![](images/update.gif "update") | Changed tstring to log4cxx::String and tostringstream to log4cxx::StringBuffer. |    |
+| ![](images/fix.gif "fix")    | Fixed MSVC 2003 compilation erros and warnings.                                 |    |
+| ![](images/add.gif "add")    | Added helpers for NDC and MDC.                                                  |    |
+| ![](images/add.gif "add")    | Added TimeZone support in TTCCLayout.                                           |    |
+| ![](images/fix.gif "fix")    | Fixed compilation problems with logger macros (LOG4CXX\_...)                    |    |
+| ![](images/fix.gif "fix")    | Fixed milliseconds formatting problem with MSVC 6.0 and 2003                    |    |
+| ![](images/fix.gif "fix")    | Fixed AsyncAppender crash                                                       |    |
+| ![](images/add.gif "add")    | Added new tests                                                                 |    |
+| ![](images/add.gif "add")    | Added benchmarks                                                                |    |
+
+<a name="0.9.2"/>
+### Release 0.9.2 - 2003-08-10
+
+|                                                                     |                                                                               |    |
+| ------------------------------------------------------------------- | ----------------------------------------------------------------------------- | -- |
+| Type                                                                | Changes                                                                       | By |
+| ![](images/fix.gif "fix")    | Fixed FreeBSD compilation problem with pthread mutex (class CriticalSection). |    |
+| ![](images/fix.gif "fix")    | Fixed milliseconds formatting problem (class DateFormat).                     |    |
+| ![](images/add.gif "add")    | Long events (\> 1024 chars) are now supported in the class XMLSocketAppender. |    |
+| ![](images/update.gif "update") | Carriage returns have been normalized in the class XMLLayout.                 |    |
+
+<a name="0.9.1"/>
+### Release 0.9.1 - 2003-08-06
+
+|                                                                     |                                                              |    |
+| ------------------------------------------------------------------- | ------------------------------------------------------------ | -- |
+| Type                                                                | Changes                                                      | By |
+| ![](images/fix.gif "fix")    | Fixed deadlock problems in classes Logger and AsyncAppender. |    |
+| ![](images/fix.gif "fix")    | Fixed MSVC 6.0 compilation problems.                         |    |
+| ![](images/add.gif "add")    | Added MSVC 6.0 static libraty project.                       |    |
+| ![](images/update.gif "update") | Default configuration for the SMTP options is "no".          |    |
+
+<a name="0.9.0"/>
+### Release 0.9.0 - 2003-08-06
+
+|                                                                  |                                                                        |    |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                                | By |
+| ![](images/add.gif "add") | Added ODBCAppender (matching log4j JDBCAppender)                       |    |
+| ![](images/add.gif "add") | Added SyslogAppender                                                   |    |
+| ![](images/add.gif "add") | Added SMTPAppender (only for Linux/FreeBSD)                            |    |
+| ![](images/add.gif "add") | Added BasicConfigurator                                                |    |
+| ![](images/add.gif "add") | Added a FileWatchDog in PropertyConfigurator and DOMConfigurator       |    |
+| ![](images/add.gif "add") | Possibility to load a custom LoggerFactory through the DOMConfigurator |    |
+| ![](images/add.gif "add") | Changed time precision from seconds to milliseconds                    |    |
+| ![](images/add.gif "add") | Added MSVC 6.0 'Unicode Debug' and 'Unicode Release' targets           |    |
+| ![](images/add.gif "add") | Added Java like System class.                                          |    |
+
+<a name="0.1.1"/>
+### Release 0.1.1 - 2003-07-09
+
+|                                                                  |                                                                     |    |
+| ---------------------------------------------------------------- | ------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                             | By |
+| ![](images/fix.gif "fix") | Fixed MSVC 6.0 compilation problems concerning the 'Release' target |    |
+| ![](images/add.gif "add") | Added MSVC 6.0 tests projects                                       |    |
+
+<a name="0.1.0"/>
+### Release 0.1.0 - 2003-07-08
+
+|                                                                  |                                                                                                                                                            |    |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                                                                                                                    | By |
+| ![](images/add.gif "add") | FreeBSD Autotools/Compilation support                                                                                                                      |    |
+| ![](images/fix.gif "fix") | Fixed TelnetAppender crash when a socket bind exception occured.                                                                                           |    |
+| ![](images/add.gif "add") | Added log4j DTD support to XMLLayout and DOMConfigurator                                                                                                   |    |
+| ![](images/add.gif "add") | Can now send events in XML format over TCP (class XMLSocketAppender) for the log4j Chainsaw UI                                                             |    |
+| ![](images/add.gif "add") | Now compiles with 'configure --enable-unicode' (UTF16 Unicode support)                                                                                     |    |
+| ![](images/add.gif "add") | Added Java like Properties class. It's a helper for the PropertyConfigurator                                                                               |    |
+| ![](images/add.gif "add") | Added Java like objects with dynamic cast and instanciation. Custom objects can be configured through the DOMConfigurator and PropertyConfigurator classes |    |
+| ![](images/add.gif "add") | Port of the PropertyConfigurator class                                                                                                                     |    |
+| ![](images/add.gif "add") | Port of the "Map Diagnostic Context" (MDC) class                                                                                                           |    |
+| ![](images/add.gif "add") | Added 13 tests (try make check)                                                                                                                            |    |
+
+<a name="0.0.1"/>
+### Release 0.0.1 - 2003-05-31
+
+|                                                                  |                                                                                                                                                      |    |
+| ---------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | -- |
+| Type                                                             | Changes                                                                                                                                              | By |
+| ![](images/add.gif "add") | Loggers, Hierarchy, Filters, Appenders, Layouts, NDC                                                                                                 |    |
+| ![](images/add.gif "add") | Appenders: AsyncAppender, ConsoleAppender, FileAppender, NTEventLogAppender, RollingFileAppender, SocketAppender, SocketHubAappender, TelnetAppender |    |
+| ![](images/add.gif "add") | Layouts: HTMLLayout, PatternLayout, SimpleLayout, TTCCLayout, XMLLayout                                                                              |    |
+| ![](images/add.gif "add") | Filters: DenyAllFilter, LevelMatchFilter, LevelRangeFilter, StringMatchFilter                                                                        |    |
+| ![](images/add.gif "add") | Configurators: DOMConfigurator                                                                                                                       |    |
diff --git a/src/site/markdown/dependencies.md b/src/site/markdown/dependencies.md
index 49a21ec..5cfe28f 100644
--- a/src/site/markdown/dependencies.md
+++ b/src/site/markdown/dependencies.md
@@ -1,3 +1,9 @@
+Dependencies {#dependencies}
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
@@ -15,6 +21,7 @@
  limitations under the License.
 -->
 
+
 # LOG4CXX Dependencies
 
 log4cxx requires the following software to build and/or run correctly:
diff --git a/src/site/markdown/faq.md b/src/site/markdown/faq.md
index 190ff4d..b1c7ce6 100644
--- a/src/site/markdown/faq.md
+++ b/src/site/markdown/faq.md
@@ -1,3 +1,9 @@
+FAQ {#faq}
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
 <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md
new file mode 100644
index 0000000..37c9598
--- /dev/null
+++ b/src/site/markdown/index.md
@@ -0,0 +1,26 @@
+<!--
+ 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.
+-->
+
+# Short introduction to Apache log4cxx
+
+Apache log4cxx is a logging framework for C++ patterned after Apache log4j, which uses Apache Portable Runtime for most platform-specific code and should be usable on any platform supported by APR. Apache log4cxx is licensed under the Apache License, an open source license certified by the Open Source Initiative.
+
+Almost every large application includes its own logging or tracing API. Inserting log statements into code is a low-tech method for debugging it. It may also be the only way because debuggers are not always available or applicable. This is usually the case for multithreaded applications and distributed applications at large.
+
+Experience indicates that logging is an important component of the development cycle. It offers several advantages. It provides precise context about a run of the application. Once inserted into the code, the generation of logging output requires no human intervention. Moreover, log output can be saved in persistent medium to be studied at a later time. In addition to its use in the development cycle, a sufficiently rich logging package can also be viewed as an auditing tool.
+
+Logging does have its drawbacks. It can slow down an application. If too verbose, it can cause scrolling blindness. To alleviate these concerns, log4cxx is designed to be reliable, fast and extensible. Since logging is rarely the main focus of an application, the log4cxx API strives to be simple to understand and to use.
diff --git a/src/site/markdown/usage.md b/src/site/markdown/usage.md
new file mode 100644
index 0000000..3cb2494
--- /dev/null
+++ b/src/site/markdown/usage.md
@@ -0,0 +1,624 @@
+Usage {#usage}
+===
+<!--
+ Note: License header cannot be first, as doxygen does not generate
+ cleanly if it before the '==='
+-->
+<!--
+ 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.
+-->
+## Loggers<span id="anchor"></span>
+
+Log4cxx has three main components: *loggers*, *appenders* and *layouts*.
+These three types of components work together to enable developers to
+log messages according to message type and level, and to control at
+runtime how these messages are formatted and where they are reported. 
+
+### Hierarchy<span id="anchor-1"></span>
+
+The first and foremost advantage of any logging API over plain
+*std::cout* resides in its ability to disable certain log statements
+while allowing others to print unhindered. This capability assumes that
+the logging space, that is, the space of all possible logging
+statements, is categorized according to some developer-chosen criteria. 
+
+Loggers are named entities. Logger names are case-sensitive and they
+follow the hierarchical naming rule: 
+
+**Named Hierarchy** 
+
+A logger is said to be an *ancestor* of another logger if its name
+followed by a dot is a prefix of the *descendant* logger name. A logger
+is said to be a *parent* of a *child* logger if there are no ancestors
+between itself and the descendant logger. 
+
+For example, the logger named *"com.foo"* is a parent of the logger
+named *"com.foo.Bar"*. Similarly, *"java"* is a parent of *"java.util"*
+and an ancestor of *"java.util.Vector"*. This naming scheme should be
+familiar to most developers. 
+
+The root logger resides at the top of the logger hierarchy. It is
+exceptional in two ways: 
+
+1.  it always exists, 
+2.  it cannot be retrieved by name. 
+
+Invoking the class static
+[log4cxx::Logger::getRootLogger](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_logger.html#afc0e4d99cab7c38a2851d41e6edc1dee)
+method retrieves it. All other loggers are instantiated and retrieved
+with the class static
+[log4cxx::Logger::getLogger](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_logger.html#a76017df17da02bc11bfe50e47de703a3)
+method. This method takes the name of the desired logger as a parameter.
+Some of the basic methods in the Logger class are listed below. 
+
+namespace log4cxx {    class **Logger** {         public:               
+// Creation & retrieval methods:                       static LoggerPtr
+getRootLogger();                      static LoggerPtr getLogger(const
+std::string& name);                   static LoggerPtr getLogger(const
+std::wstring& name);  }} //// Use these macros instead of calling Logger
+methods directly.// Macros will handle char or wchar\_t pointers or
+strings// or most right-hand side expressions of an//
+std::basic\_string::operator\<\<.//\#define LOG4CXX\_TRACE(logger,
+expression) ...\#define LOG4CXX\_DEBUG(logger, expression) ...\#define
+LOG4CXX\_INFO(logger, expression) ...\#define LOG4CXX\_WARN(logger,
+expression) ...\#define LOG4CXX\_ERROR(logger, expression) ...\#define
+LOG4CXX\_FATAL(logger, expression) ...
+
+### Levels<span id="anchor-2"></span>
+
+Loggers *may* be assigned levels. The pre-defined levels: TRACE, DEBUG,
+INFO, WARN, ERROR and FATAL are defined in the
+[*log4cxx::Level*](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_level.html)
+class which provides accessor functions. 
+
+If a given logger is not assigned a level, then it inherits one from its
+closest ancestor with an assigned level. More formally: 
+
+**Level Inheritance** 
+
+The *inherited level* for a given logger *C*, is equal to the first
+non-null level in the logger hierarchy, starting at *C* and proceeding
+upwards in the hierarchy towards the *root* logger. 
+
+To ensure that all loggers can eventually inherit a level, the root
+logger always has an assigned level. 
+
+Below are four tables with various assigned level values and the
+resulting inherited levels according to the above rule. 
+
+|             |                |                 |
+| ----------- | -------------- | --------------- |
+| Logger name | Assigned level | Inherited level |
+| root        | Proot          | Proot           |
+| X           | none           | Proot           |
+| X.Y         | none           | Proot           |
+| X.Y.Z       | none           | Proot           |
+
+Example 1
+
+In example 1 above, only the root logger is assigned a level. This level
+value, *Proot*, is inherited by the other loggers *X*, *X.Y* and
+*X.Y.Z*. 
+
+|             |                |                 |
+| ----------- | -------------- | --------------- |
+| Logger name | Assigned level | Inherited level |
+| root        | Proot          | Proot           |
+| X           | Px             | Px              |
+| X.Y         | Pxy            | Pxy             |
+| X.Y.Z       | Pxyz           | Pxyz            |
+
+Example 2
+
+In example 2, all loggers have an assigned level value. There is no need
+for level inheritence. 
+
+|             |                |                 |
+| ----------- | -------------- | --------------- |
+| Logger name | Assigned level | Inherited level |
+| root        | Proot          | Proot           |
+| X           | Px             | Px              |
+| X.Y         | none           | Px              |
+| X.Y.Z       | Pxyz           | Pxyz            |
+
+Example 3
+
+In example 3, the loggers *root*, *X* and *X.Y.Z* are assigned the
+levels *Proot*, *Px* and *Pxyz* respectively. The logger *X.Y* inherits
+its level value from its parent *X*. 
+
+|             |                |                 |
+| ----------- | -------------- | --------------- |
+| Logger name | Assigned level | Inherited level |
+| root        | Proot          | Proot           |
+| X           | Px             | Px              |
+| X.Y         | none           | Px              |
+| X.Y.Z       | none           | Px              |
+
+Example 4
+
+In example 4, the loggers *root* and *X* and are assigned the levels
+*Proot* and *Px* respectively. The loggers *X.Y* and *X.Y.Z* inherits
+their level value from their nearest parent *X* having an assigned
+level. 
+
+### Requests<span id="anchor-3"></span>
+
+Logging requests are made by invoking a method of a logger instance,
+preferrably through the use of LOG4CXX\_INFO or similar macros which
+support short-circuiting if the threshold is not satisfied and use of
+the insertion operator (\<\<) in the message parameter. 
+
+log4cxx::LoggerPtr
+logger(log4cxx::Logger::getLogger(**"com.foo"**));const char\* region =
+"World";LOG4CXX\_INFO(logger, "Simple message
+text.")LOG4CXX\_INFO(logger, "Hello, " \<\<
+region)LOG4CXX\_DEBUG(logger, L"Iteration " \<\<
+i)LOG4CXX\_DEBUG(logger, "e^10 = " \<\< std::scientific \<\<
+exp(10.0))//// Use a wchar\_t first operand to force use of wchar\_t
+based stream.//LOG4CXX\_WARN(logger, L"" \<\< i \<\< L" is the number of
+the iteration.")
+
+A logging request is said to be *enabled* if its level is higher than or
+equal to the level of its logger. Otherwise, the request is said to be
+*disabled*. A logger without an assigned level will inherit one from the
+hierarchy. This rule is summarized below. 
+
+**Basic Selection Rule** 
+
+A log request of level *p* in a logger with (either assigned or
+inherited, whichever is appropriate) level *q*, is enabled if *p \>= q*.
+
+This rule is at the heart of log4cxx. It assumes that levels are
+ordered. For the standard levels, we have *TRACE \< DEBUG \< INFO \<
+WARN \< ERROR \< FATAL*. 
+
+Here is an example of this rule. 
+
+// get a logger instance named "com.foo"log4cxx::LoggerPtr
+logger(log4cxx::Logger::getLogger(**"com.foo"**)); // Now set its level.
+Normally you do not need to set the// level of a logger
+programmatically. This is usually done// in configuration
+files.**logger**-\>setLevel(**log4cxx::Level::getInfo()**); log4cxx::LoggerPtr
+barlogger(log4cxx::Logger::getLogger(**"com.foo.Bar"**)); // This
+request is enabled, because **WARN** \>= **INFO**.LOG4CXX\_WARN(logger,
+"Low fuel level.") // This request is disabled, because **DEBUG** \<
+**INFO**.LOG4CXX\_DEBUG(logger, "Starting search for nearest gas
+station.") // The logger instance barlogger, named "com.foo.Bar",// will
+inherit its level from the logger named// "com.foo" Thus, the following
+request is enabled// because **INFO** \>=
+**INFO**.LOG4CXX\_INFO(barlogger. "Located nearest gas station.") //
+This request is disabled, because **DEBUG** \<
+**INFO**.LOG4CXX\_DEBUG(barlogger, "Exiting gas station search")
+
+Calling the *getLogger* method with the same name will always return a
+reference to the exact same logger object. 
+
+For example, in 
+
+log4cxx::LoggerPtr x =
+log4cxx::Logger::getLogger("wombat");log4cxx::LoggerPtr y =
+log4cxx::Logger::getLogger("wombat");
+
+*x* and *y* refer to *exactly* the same logger object. 
+
+Thus, it is possible to configure a logger and then to retrieve the same
+instance somewhere else in the code without passing around references.
+In fundamental contradiction to biological parenthood, where parents
+always preceed their children, log4cxx loggers can be created and
+configured in any order. In particular, a "parent" logger will find and
+link to its descendants even if it is instantiated after them. 
+
+Configuration of the log4cxx environment is typically done at
+application initialization. The preferred way is by reading a
+configuration file. This approach will be discussed shortly. 
+
+Log4cxx makes it easy to name loggers by *software component*. This can
+be accomplished by statically instantiating a logger in each class, with
+the logger name equal to the fully qualified name of the class. This is
+a useful and straightforward method of defining loggers. As the log
+output bears the name of the generating logger, this naming strategy
+makes it easy to identify the origin of a log message. However, this is
+only one possible, albeit common, strategy for naming loggers. Log4cxx
+does not restrict the possible set of loggers. The developer is free to
+name the loggers as desired. 
+
+Nevertheless, naming loggers after the class where they are located
+seems to be the best strategy known so far. 
+
+## Appenders and Layouts<span id="anchor-4"></span>
+
+The ability to selectively enable or disable logging requests based on
+their logger is only part of the picture. Log4cxx allows logging
+requests to print to multiple destinations. In log4cxx speak, an output
+destination is called an *appender*. Currently, appenders exist for the
+[console](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_console_appender.html),
+[files](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_file_appender.html),
+GUI components, [remote
+socket](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1net_1_1_socket_appender.html)
+servers, [NT Event
+Loggers](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1nt_1_1_n_t_event_log_appender.html),
+and remote UNIX
+[Syslog](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1net_1_1_syslog_appender.html)
+daemons. It is also possible to log
+[asynchronously](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_async_appender.html).
+
+More than one appender can be attached to a logger.
+
+The
+[addAppender](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_logger.html#a7c0629acee8dbd1251474bea15d7c9e2)
+method adds an appender to a given logger. **Each enabled logging
+request for a given logger will be forwarded to all the appenders in
+that logger as well as the appenders higher in the hierarchy. **In other
+words, appenders are inherited additively from the logger hierarchy. For
+example, if a console appender is added to the root logger, then all
+enabled logging requests will at least print on the console. If in
+addition a file appender is added to a logger, say *C*, then enabled
+logging requests for *C* and *C*'s children will print on a file *and*
+on the console. It is possible to override this default behavior so that
+appender accumulation is no longer additive by [setting the additivity
+flag](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_logger.html#a80f9397947dba9071ad485f178257c17)
+to *false*. 
+
+The rules governing appender additivity are summarized below.
+
+**Appender Additivity** 
+
+The output of a log statement of logger *C* will go to all the appenders
+in *C* and its ancestors. This is the meaning of the term "appender
+additivity". However, if an ancestor of logger *C*, say *P*, has the
+additivity flag set to *false*, then *C*'s output will be directed to
+all the appenders in *C* and it's ancestors up to and including *P* but,
+not the appenders in any of the ancestors of *P*.  
+  
+Loggers have their additivity flag set to *true* by default. 
+
+The table below shows an
+example:
+
+|                 |                 |                 |                        |                                                                                                                                                   |
+| --------------- | --------------- | --------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
+| Logger Name     | Added Appenders | Additivity Flag | Output Targets         | Comment                                                                                                                                           |
+| root            | A1              | not applicable  | A1                     | The root logger is anonymous but can be accessed with the log4cxx::Logger::getRootLogger() method. There is no default appender attached to root. |
+| x               | A-x1, A-x2      | true            | A1, A-x1, A-x2         | Appenders of "x" and root.                                                                                                                        |
+| x.y             | none            | true            | A1, A-x1, A-x2         | Appenders of "x" and root.                                                                                                                        |
+| x.y.z           | A-xyz1          | true            | A1, A-x1, A-x2, A-xyz1 | Appenders in "x.y.z", "x" and root.                                                                                                               |
+| security        | A-sec           | false           | A-sec                  | No appender accumulation since the additivity flag is set to *false*.                                                                             |
+| security.access | none            | true            | A-sec                  | Only appenders of "security" because the additivity flag in "security" is set to *false*.                                                         |
+
+More often than not, users wish to customize not only the output
+destination but also the output format. This is accomplished by
+associating a *layout* with an appender. The layout is responsible for
+formatting the logging request according to the user's wishes, whereas
+an appender takes care of sending the formatted output to its
+destination. 
+
+The
+[PatternLayout](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_pattern_layout.html),
+part of the standard log4cxx distribution, lets the user specify the
+output format according to conversion patterns similar to the C language
+*printf* function. 
+
+For example, the PatternLayout with the conversion pattern "%r \[%t\]
+%-5p %c - %m%n" will output something akin to: 
+
+176 \[main\] INFO org.foo.Bar - Located nearest gas station.
+
+The first field is the number of milliseconds elapsed since the start of
+the program. The second field is the thread making the log request. The
+third field is the level of the log statement. The fourth field is the
+name of the logger associated with the log request. The text after the
+'-' is the message of the statement. 
+
+## Configuration<span id="anchor-5"></span>
+
+Inserting log requests into the application code requires a fair amount
+of planning and effort. Observation shows that approximately 4 percent
+of code is dedicated to logging. Consequently, even moderately sized
+applications will have thousands of logging statements embedded within
+their code. Given their number, it becomes imperative to manage these
+log statements without the need to modify them manually. 
+
+The log4cxx environment is fully configurable programmatically. However,
+it is far more flexible to configure log4cxx using configuration files.
+Currently, configuration files can be written in XML or in Java
+properties (key=value) format. 
+
+Let us give a taste of how this is done with the help of an imaginary
+application *MyApp* that uses log4cxx. 
+
+\#include "com/foo/bar.h"using namespace com::foo; // include log4cxx
+header files.\#include "log4cxx/logger.h"\#include
+"log4cxx/basicconfigurator.h"\#include
+"log4cxx/helpers/exception.h" using namespace log4cxx;using namespace
+log4cxx::helpers; LoggerPtr logger(Logger::getLogger("MyApp")); int
+main(int argc, char \*\*argv){     int result = EXIT\_SUCCESS;     try  
+ {              // Set up a simple configuration that logs on the
+console.             BasicConfigurator::configure();               
+LOG4CXX\_INFO(logger, "Entering application.")          Bar bar;        
+      bar.doIt();            LOG4CXX\_INFO(logger, "Exiting
+application.")   }      catch(Exception&)      {              result =
+EXIT\_FAILURE; }      return result;}
+
+*MyApp* begins by including log4cxx headers. It then defines a static
+logger variable with the name *MyApp* which happens to be the fully
+qualified name of the class. 
+
+*MyApp* uses the *Bar* class defined in header file *com/foo/bar.h*. 
+
+// file com/foo/bar.h\#include "log4cxx/logger.h" namespace com {      
+namespace foo {        class Bar {                    static
+log4cxx::LoggerPtr logger;                      public:                 
+      void doIt();           }      }}
+
+// file bar.cpp\#include "com/foo/bar.h" using namespace com::foo;using
+namespace log4cxx; LoggerPtr
+Bar::logger(Logger::getLogger("com.foo.bar")); void Bar::doIt() { 
+LOG4CXX\_DEBUG(logger, "Did it again\!")}
+
+The invocation of the
+[BasicConfigurator::configure](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_basic_configurator.html#a4f96a09e1372664e3556ce94ace4a70c)
+method creates a rather simple log4cxx setup. This method is hardwired
+to add to the root logger a
+[ConsoleAppender](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_console_appender.html).
+The output will be formatted using a
+[PatternLayout](https://logging.apache.org/log4cxx/latest_stable/apidocs/classlog4cxx_1_1_pattern_layout.html)
+set to the pattern "%-4r \[%t\] %-5p %c %x - %m%n". 
+
+Note that by default, the root logger is assigned to
+*Level::getDebug()*. 
+
+The output of MyApp is: 
+
+0   \[12345\] INFO MyApp - Entering application.36  \[12345\] DEBUG
+com.foo.Bar - Did it again\!51  \[12345\] INFO MyApp - Exiting
+application.
+
+The previous example always outputs the same log information.
+Fortunately, it is easy to modify *MyApp* so that the log output can be
+controlled at run-time. Here is a slightly modified version. 
+
+// file MyApp2.cpp \#include "com/foo/bar.h"using namespace com::foo; //
+include log4cxx header files.\#include "log4cxx/logger.h"\#include
+"log4cxx/basicconfigurator.h"\#include
+"log4cxx/propertyconfigurator.h"\#include
+"log4cxx/helpers/exception.h" using namespace log4cxx;using namespace
+log4cxx::helpers;// Define a static logger variable so that it
+references the// Logger instance named "MyApp".LoggerPtr
+logger(Logger::getLogger("MyApp")); int main(int argc, char \*\*argv){  
+  int result = EXIT\_SUCCESS;     try    {              if (argc \> 1)  
+       {                      // BasicConfigurator replaced with
+PropertyConfigurator.                      
+PropertyConfigurator::configure(argv\[1\]);              }             
+else           {                      BasicConfigurator::configure();   
+    }              LOG4CXX\_INFO(logger, "Entering application.")       
+  Bar bar        bar.doIt();            LOG4CXX\_INFO(logger, "Exiting
+application.")   }      catch(Exception&)      {              result =
+EXIT\_FAILURE; }      return result;}
+
+This version of *MyApp* instructs *PropertyConfigurator* to parse a
+configuration file and set up logging accordingly. 
+
+Here is a sample configuration file that results in exactly same output
+as the previous *BasicConfigurator* based example. 
+
+\# Set root logger level to DEBUG and its only appender to
+A1.log4j.rootLogger=DEBUG, A1 \# A1 is set to be a
+ConsoleAppender.log4j.appender.A1=org.apache.log4j.ConsoleAppender \# A1
+uses
+PatternLayout.log4j.appender.A1.layout=org.apache.log4j.PatternLayoutlog4j.appender.A1.layout.ConversionPattern=%-4r
+\[%t\] %-5p %c %x - %m%n
+
+It can be noticed that the PropertyConfigurator file format is the same
+as log4j. 
+
+Suppose we are no longer interested in seeing the output of any
+component belonging to the *com::foo* package. The following
+configuration file shows one possible way of achieving this. 
+
+log4j.rootLogger=DEBUG,
+A1log4j.appender.A1=org.apache.log4j.ConsoleAppenderlog4j.appender.A1.layout=org.apache.log4j.PatternLayout \#
+**Print the date in ISO 8601
+format**log4j.appender.A1.layout.ConversionPattern=**%d** \[%t\] %-5p %c
+- %m%n \# Print only messages of level WARN or above in the package
+com.foo.**log4j.logger.com.foo=WARN**
+
+The output of *MyApp* configured with this file is shown below. 
+
+**2000-09-07 14:07:41,508** \[12345\] INFO MyApp - Entering
+application.**2000-09-07 14:07:41,529** \[12345\] INFO MyApp - Exiting
+application.
+
+As the logger *com.foo.Bar* does not have an assigned level, it inherits
+its level from *com.foo*, which was set to WARN in the configuration
+file. The log statement from the *Bar::doIt* method has the level DEBUG,
+lower than the logger level WARN. Consequently, *doIt()* method's log
+request is suppressed. 
+
+Here is another configuration file that uses multiple appenders. 
+
+log4j.rootLogger=debug, **stdout,
+R** log4j.appender.**stdout**=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayout \#
+Pattern to output the caller's file name and line
+number.log4j.appender.stdout.layout.ConversionPattern=%5p \[%t\]
+**(%F:%L)** -
+%m%n log4j.appender.**R**=org.apache.log4j.RollingFileAppenderlog4j.appender.R.File=example.log log4j.appender.R.MaxFileSize=**100KB**\#
+Keep one backup
+filelog4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p
+%t %c - %m%n
+
+Calling the enhanced MyApp with the this configuration file will output
+the following on the console. 
+
+INFO \[12345\] **(MyApp2.cpp:31)** - Entering application.DEBUG
+\[12345\] (Bar.h:16) - Doing it again\!INFO \[12345\] (MyApp2.cpp:34) -
+Exiting application.
+
+In addition, as the root logger has been allocated a second appender,
+output will also be directed to the *example.log* file. This file will
+be rolled over when it reaches 100KB. When roll-over occurs, the old
+version of *example.log* is automatically moved to *example.log.1*. 
+
+Note that to obtain these different logging behaviors we did not need to
+recompile code. We could just as easily have logged to a UNIX Syslog
+daemon, redirected all *com.foo* output to an NT Event logger, or
+forwarded logging events to a remote log4cxx server, which would log
+according to local server policy, for example by forwarding the log
+event to a second log4cxx server. 
+
+## Default Initialization Procedure<span id="anchor-6"></span>
+
+The log4cxx library does not make any assumptions about its environment.
+In particular, there are no default log4cxx appenders. Under certain
+well-defined circumstances however, the static inializer of the *Logger*
+class will attempt to automatically configure log4cxx. 
+
+The exact default initialization algorithm is defined as follows: 
+
+1.  Set the configurationOptionStr string variable to the value of the
+    **LOG4CXX\_CONFIGURATION** environment variable if set, otherwise
+    the value of the **log4j.configuration** environment variable if
+    set, otherwise the first of the following file names which exist in
+    the current working directory, "log4cxx.xml", "log4cxx.properties",
+    "log4j.xml" and "log4j.properties". If configurationOptionStr has
+    not been set, then disable logging. 
+2.  Unless a custom configurator is specified using the
+    **LOG4CXX\_CONFIGURATOR\_CLASS** or **log4j.configuratorClass**
+    environment variable, the PropertyConfigurator will be used to
+    configure log4cxx unless the file name ends with the ".xml"
+    extension, in which case the DOMConfigurator will be used. If a
+    custom configurator is specified, the environment variable should
+    contain a fully qualified class name of a class that implements the
+    Configurator interface. 
+
+## Nested Diagnostic Contexts<span id="anchor-7"></span>
+
+Most real-world systems have to deal with multiple clients
+simultaneously. In a typical multithreaded implementation of such a
+system, different threads will handle different clients. Logging is
+especially well suited to trace and debug complex distributed
+applications. A common approach to differentiate the logging output of
+one client from another is to instantiate a new separate logger for each
+client. This promotes the proliferation of loggers and increases the
+management overhead of logging. 
+
+A lighter technique is to uniquely stamp each log request initiated from
+the same client interaction. Neil Harrison described this method in the
+book "Patterns for Logging Diagnostic Messages," in *Pattern Languages
+of Program Design 3*, edited by R. Martin, D. Riehle, and F. Buschmann
+(Addison-Wesley, 1997). 
+
+To uniquely stamp each request, the user pushes contextual information
+into the NDC, the abbreviation of *Nested Diagnostic Context*. The NDC
+class is shown below. 
+
+namespace log4cxx {    class NDC {            public:                //
+pushes the value on construction and pops on destruction.               
+   NDC(const std::string& value);                 NDC(const
+std::wstring& value);                        // Remove the top of the
+context from the NDC.                 **static** LogString pop();       
+                // Add diagnostic context for the current thread.       
+              **static** void push(const std::string& message);         
+        **static** void push(const std::wstring& message); }}
+
+The NDC is managed per thread as a *stack* of contextual information.
+Note that all methods of the *log4cxx::NDC* class are static. Assuming
+that NDC printing is turned on, every time a log request is made, the
+appropriate log4cxx component will include the *entire* NDC stack for
+the current thread in the log output. This is done without the
+intervention of the user, who is responsible only for placing the
+correct information in the NDC by using the *push* and *pop* methods at
+a few well-defined points in the code. In contrast, the per-client
+logger approach commands extensive changes in the code. 
+
+To illustrate this point, let us take the example of a servlet
+delivering content to numerous clients. The servlet can build the NDC at
+the very beginning of the request before executing other code. The
+contextual information can be the client's host name and other
+information inherent to the request, typically information contained in
+cookies. Hence, even if the servlet is serving multiple clients
+simultaneously, the logs initiated by the same code, i.e. belonging to
+the same logger, can still be distinguished because each client request
+will have a different NDC stack. Contrast this with the complexity of
+passing a freshly instantiated logger to all code exercised during the
+client's request. 
+
+Nevertheless, some sophisticated applications, such as virtual hosting
+web servers, must log differently depending on the virtual host context
+and also depending on the software component issuing the request. Recent
+log4cxx releases support multiple hierarchy trees. This enhancement
+allows each virtual host to possess its own copy of the logger
+hierarchy. 
+
+## Performance<span id="anchor-8"></span>
+
+One of the often-cited arguments against logging is its computational
+cost. This is a legitimate concern as even moderately sized applications
+can generate thousands of log requests. Much effort was spent measuring
+and tweaking logging performance. Log4cxx claims to be fast and
+flexible: speed first, flexibility second. 
+
+The user should be aware of the following performance issues. 
+
+1.  **Logging performance when logging is turned off.** 
+    
+    When logging is turned off entirely or just for a set of levels, the
+    cost of a log request consists of a method invocation plus an
+    integer comparison. The LOG4CXX\_DEBUG and similar macros suppress
+    unnecessary expression evaluation if the request is not enabled. 
+
+2.  **The performance of deciding whether to log or not to log when
+    logging is turned on.** 
+    
+    This is essentially the performance of walking the logger hierarchy.
+    When logging is turned on, log4cxx still needs to compare the level
+    of the log request with the level of the request logger. However,
+    loggers may not have an assigned level; they can inherit them from
+    the logger hierarchy. Thus, before inheriting a level, the logger
+    may need to search its ancestors. 
+    
+    There has been a serious effort to make this hierarchy walk to be as
+    fast as possible. For example, child loggers link only to their
+    existing ancestors. In the *BasicConfigurator* example shown
+    earlier, the logger named *com.foo.Bar* is linked directly to the
+    root logger, thereby circumventing the nonexistent *com* or
+    *com.foo* loggers. This significantly improves the speed of the
+    walk, especially in "sparse" hierarchies. 
+    
+    The cost of walking the hierarchy is typically 3 times slower than
+    when logging is turned off entirely. 
+
+3.  **Actually outputting log messages** 
+    
+    This is the cost of formatting the log output and sending it to its
+    target destination. Here again, a serious effort was made to make
+    layouts (formatters) perform as quickly as possible. The same is
+    true for appenders. 
+
+## Conclusions<span id="anchor-9"></span>
+
+Apache Log4cxx is a popular logging package written in C++. One of its
+distinctive features is the notion of inheritance in loggers. Using a
+logger hierarchy it is possible to control which log statements are
+output at arbitrary granularity. This helps reduce the volume of logged
+output and minimize the cost of logging. 
+
+One of the advantages of the log4cxx API is its manageability. Once the
+log statements have been inserted into the code, they can be controlled
+with configuration files. They can be selectively enabled or disabled,
+and sent to different and multiple output targets in user-chosen
+formats. The log4cxx package is designed so that log statements can
+remain in shipped code without incurring a heavy performance cost.
diff --git a/src/site/xdoc/usage.xml b/src/site/xdoc/usage.xml
deleted file mode 100644
index ad272ca..0000000
--- a/src/site/xdoc/usage.xml
+++ /dev/null
@@ -1,1062 +0,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>
-	<properties>
-		<title>How to use Apache log4cxx</title>
-	</properties>
-
-	<body>
-		<section name="Loggers">
-			<p>
-				Log4cxx has three main components: <em>loggers</em>,
-				<em>appenders</em> and <em>layouts</em>. These three types of
-				components work together to enable developers to log messages according
-				to message type and level, and to control at runtime how these
-				messages are formatted and where they are reported.
-			</p>
-
-			<subsection name="Hierarchy">
-				<p>
-					The first and foremost advantage of any logging API over plain
-					<code>std::cout</code> resides in its ability to disable
-					certain log statements while allowing others to print unhindered. This
-					capability assumes that the logging space, that is, the space of all
-					possible logging statements, is categorized according to some
-					developer-chosen criteria.
-				</p>
-
-				<p>
-					Loggers are named entities. Logger names are case-sensitive and
-					they follow the hierarchical naming rule:
-				</p>
-
-				<dl>
-					<dt><strong>Named Hierarchy</strong></dt>
-					<dd>
-						A logger is said to be an <em>ancestor</em> of another
-						logger if its name followed by a dot is a prefix of the
-						<em>descendant</em> logger name. A logger is said to be a
-						<em>parent</em> of a <em>child</em> logger if there are no
-						ancestors between itself and the descendant logger.
-					</dd>
-				</dl>
-
-				<p>
-					For example, the logger named <code>"com.foo"</code> is a parent
-					of the logger named <code>"com.foo.Bar"</code>.  Similarly,
-					<code>"java"</code> is a parent of <code>"java.util"</code> and an
-					ancestor of <code>"java.util.Vector"</code>. This naming scheme
-					should be familiar to most developers.
-				</p>
-
-				<p>
-					The root logger resides at the top of the logger hierarchy. It
-					is exceptional in two ways:
-				</p>
-
-				<ol>
-					<li> it always exists,</li>
-					<li> it cannot be retrieved by name.</li>
-				</ol>
-
-				<p>
-					Invoking the class static <a href="apidocs/classlog4cxx_1_1_logger.html#afc0e4d99cab7c38a2851d41e6edc1dee">log4cxx::Logger::getRootLogger</a>
-					method retrieves it. All other loggers are instantiated and retrieved with the class static
-					<a href="apidocs/classlog4cxx_1_1_logger.html#a76017df17da02bc11bfe50e47de703a3">log4cxx::Logger::getLogger</a>
-					method. This method takes the name of the desired logger as a parameter. Some of the basic methods in the Logger
-					class are listed below.
-				</p>
-
-				<pre class="prettyprint linenums">
-namespace log4cxx {
-	class <strong>Logger</strong> {
-		public:
-			// Creation &amp; retrieval methods:
-			static LoggerPtr getRootLogger();
-			static LoggerPtr getLogger(const std::string&amp; name);
-			static LoggerPtr getLogger(const std::wstring&amp; name);
-	}
-}
-
-//
-// Use these macros instead of calling Logger methods directly.
-// Macros will handle char or wchar_t pointers or strings
-// or most right-hand side expressions of an
-// std::basic_string::operator&lt;&lt;.
-//
-#define LOG4CXX_TRACE(logger, expression) ...
-#define LOG4CXX_DEBUG(logger, expression) ...
-#define LOG4CXX_INFO(logger, expression) ...
-#define LOG4CXX_WARN(logger, expression) ...
-#define LOG4CXX_ERROR(logger, expression) ...
-#define LOG4CXX_FATAL(logger, expression) ...</pre>
-			</subsection>
-
-			<subsection name="Levels">
-				<p>
-					Loggers <em>may</em> be assigned levels. The pre-defined
-					levels: TRACE, DEBUG, INFO, WARN, ERROR and FATAL are defined in the
-					<code><a href="apidocs/classlog4cxx_1_1_level.html">log4cxx::Level</a></code>
-					class which provides accessor functions.
-				</p>
-
-				<p>
-					If a given logger is not assigned a level, then it inherits
-					one from its closest ancestor with an assigned level. More
-					formally:
-				</p>
-
-				<dl>
-					<dt><strong>Level Inheritance</strong></dt>
-
-					<dd>
-						The <em>inherited level</em> for a given logger <i>C</i>, is equal to the
-						first non-null level in the logger hierarchy, starting at <i>C</i> and
-						proceeding upwards in the hierarchy towards the <code>root</code> logger.
-					</dd>
-				</dl>
-
-				<p>
-					To ensure that all loggers can eventually inherit a level,
-					the root logger always has an assigned level.
-				</p>
-
-				<p>
-					Below are four tables with various assigned level values and the
-					resulting inherited levels according to the above rule.
-				</p>
-
-				<table border="1">
-					<tr>
-						<th>Logger name</th>
-						<th>Assigned level</th>
-						<th>Inherited level</th>
-					</tr>
-					<tr align="left">
-						<td>root</td>
-						<td>Proot</td>
-						<td>Proot</td>
-					</tr>
-					<tr align="left">
-						<td>X </td>
-						<td>none</td>
-						<td>Proot</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y </td>
-						<td>none</td>
-						<td>Proot</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y.Z</td>
-						<td>none</td>
-						<td>Proot</td>
-					</tr>
-					<caption align="bottom">Example 1</caption>
-				</table>
-
-				<p>
-					In example 1 above, only the root logger is assigned a
-					level. This level value, <code>Proot</code>, is inherited by the
-					other loggers <code>X</code>, <code>X.Y</code> and
-					<code>X.Y.Z</code>.
-				</p>
-
-				<table border="1">
-					<tr>
-						<th>Logger name</th>
-						<th>Assigned level</th>
-						<th>Inherited level</th>
-					</tr>
-					<tr align="left">
-						<td>root</td>
-						<td>Proot</td>
-						<td>Proot</td>
-					</tr>
-					<tr align="left">
-						<td>X </td>
-						<td>Px</td>
-						<td>Px</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y </td>
-						<td>Pxy</td>
-						<td>Pxy</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y.Z</td>
-						<td>Pxyz</td>
-						<td>Pxyz</td>
-					</tr>
-					<caption align="bottom">Example 2</caption>
-				</table>
-
-				<p>
-					In example 2, all loggers have an assigned level value. There
-					is no need for level inheritence.
-				</p>
-
-				<table border="1">
-					<tr>
-						<th>Logger name</th>
-						<th>Assigned level</th>
-						<th>Inherited level</th>
-					</tr>
-					<tr align="left">
-						<td>root</td>
-						<td>Proot</td>
-						<td>Proot</td>
-					</tr>
-					<tr align="left">
-						<td>X </td>
-						<td>Px</td>
-						<td>Px</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y </td>
-						<td>none</td>
-						<td>Px</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y.Z</td>
-						<td>Pxyz</td>
-						<td>Pxyz</td>
-					</tr>
-					<caption align="bottom">Example 3</caption>
-				</table>
-
-				<p>
-					In example 3, the loggers <code>root</code>, <code>X</code> and
-					<code>X.Y.Z</code> are assigned the levels <code>Proot</code>,
-					<code>Px</code> and <code>Pxyz</code> respectively. The logger
-					<code>X.Y</code> inherits its level value from its parent
-					<code>X</code>.
-				</p>
-
-				<table border="1">
-					<tr>
-						<th>Logger name</th>
-						<th>Assigned level</th>
-						<th>Inherited level</th>
-					</tr>
-					<tr align="left">
-						<td>root</td>
-						<td>Proot</td>
-						<td>Proot</td>
-						</tr>
-					<tr align="left">
-						<td>X </td>
-						<td>Px</td>
-						<td>Px</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y </td>
-						<td>none</td>
-						<td>Px</td>
-					</tr>
-					<tr align="left">
-						<td>X.Y.Z</td>
-						<td>none</td>
-						<td>Px</td>
-					</tr>
-					<caption align="bottom">Example 4</caption>
-				</table>
-
-				<p>
-					In example 4, the loggers <code>root</code> and <code>X</code>
-					and are assigned the levels <code>Proot</code> and <code>Px</code>
-					respectively. The loggers <code>X.Y</code> and <code>X.Y.Z</code>
-					inherits their level value from their nearest parent <code>X</code>
-					having an assigned level.
-				</p>
-			</subsection>
-
-			<subsection name="Requests">
-				<p>
-					Logging requests are made by invoking a method of
-					a logger instance, preferrably through the use of LOG4CXX_INFO or similar
-					macros which support short-circuiting if the threshold is not satisfied
-					and use of the insertion operator (&lt;&lt;) in the message parameter.
-				</p>
-
-				<pre class="prettyprint linenums">
-log4cxx::LoggerPtr logger(log4cxx::Logger::getLogger(<strong>"com.foo"</strong>));
-const char* region = "World";
-LOG4CXX_INFO(logger, "Simple message text.")
-LOG4CXX_INFO(logger, "Hello, " &lt;&lt; region)
-LOG4CXX_DEBUG(logger, L"Iteration " &lt;&lt; i)
-LOG4CXX_DEBUG(logger, "e^10 = " &lt;&lt; std::scientific &lt;&lt; exp(10.0))
-//
-// Use a wchar_t first operand to force use of wchar_t based stream.
-//
-LOG4CXX_WARN(logger, L"" &lt;&lt; i &lt;&lt; L" is the number of the iteration.")</pre>
-
-				<p>
-					A logging request is said to be <em>enabled</em> if its level is
-					higher than or equal to the level of its logger. Otherwise, the
-					request is said to be <em>disabled</em>. A logger without an
-					assigned level will inherit one from the hierarchy. This rule is
-					summarized below.
-				</p>
-
-				<dl>
-					<dt><strong>Basic Selection Rule</strong></dt>
-
-					<dd>
-						A log request of level <i>p</i> in a logger with (either assigned or
-						inherited, whichever is appropriate) level <i>q</i>, is enabled if
-						<i>p &gt;= q</i>.
-					</dd>
-				</dl>
-
-				<p>
-					This rule is at the heart of log4cxx. It assumes that levels are
-					ordered. For the standard levels, we have <code>TRACE &lt; DEBUG &lt; INFO
-					&lt; WARN &lt; ERROR &lt; FATAL</code>.
-				</p>
-
-				<p>
-					Here is an example of this rule.
-				</p>
-
-				<pre class="prettyprint linenums">
-// get a logger instance named "com.foo"
-log4cxx::LoggerPtr  logger(log4cxx::Logger::getLogger(<strong>"com.foo"</strong>));
-
-// Now set its level. Normally you do not need to set the
-// level of a logger programmatically. This is usually done
-// in configuration files.
-<strong>logger</strong>->setLevel(<strong class="set-level-highlight">log4cxx::Level::getInfo()</strong>);
-
-log4cxx::LoggerPtr barlogger(log4cxx::Logger::getLogger(<strong>"com.foo.Bar"</strong>));
-
-// This request is enabled, because <strong class="log-level compare-a">WARN</strong> &gt;= <strong class="log-level compare-b">INFO</strong>.
-LOG4CXX_WARN(logger, "Low fuel level.")
-
-// This request is disabled, because <strong class="log-level compare-a">DEBUG</strong> &lt; <strong class="log-level compare-b">INFO</strong>.
-LOG4CXX_DEBUG(logger, "Starting search for nearest gas station.")
-
-// The logger instance barlogger, named "com.foo.Bar",
-// will inherit its level from the logger named
-// "com.foo" Thus, the following request is enabled
-// because <strong class="log-level compare-a">INFO</strong> &gt;= <strong class="log-level compare-b">INFO</strong>.
-LOG4CXX_INFO(barlogger. "Located nearest gas station.")
-
-// This request is disabled, because <strong class="log-level compare-a">DEBUG</strong> &lt; <strong class="log-level compare-b">INFO</strong>.
-LOG4CXX_DEBUG(barlogger, "Exiting gas station search")</pre>
-
-				<p>
-					Calling the <code>getLogger</code> method with the same name will
-					always return a reference to the exact same logger object.
-				</p>
-
-				<p>
-					For example, in
-				</p>
-
-				<pre class="prettyprint linenums">
-log4cxx::LoggerPtr x = log4cxx::Logger::getLogger("wombat");
-log4cxx::LoggerPtr y = log4cxx::Logger::getLogger("wombat");</pre>
-				<p>
-					<code>x</code> and <code>y</code> refer to <em>exactly</em> the same logger object.
-				</p>
-
-				<p>
-					Thus, it is possible to configure a logger and then to retrieve
-					the same instance somewhere else in the code without passing around
-					references. In fundamental contradiction to biological parenthood,
-					where parents always preceed their children, log4cxx loggers can be
-					created and configured in any order. In particular, a "parent"
-					logger will find and link to its descendants even if it is
-					instantiated after them.
-				</p>
-
-				<p>
-					Configuration of the log4cxx environment is typically done at
-					application initialization. The preferred way is by reading a
-					configuration file. This approach will be discussed shortly.
-				</p>
-
-				<p>
-					Log4cxx makes it easy to name loggers by <em>software
-					component</em>.  This can be accomplished by statically instantiating
-					a logger in each class, with the logger name equal to the fully
-					qualified name of the class. This is a useful and straightforward
-					method of defining loggers. As the log output bears the name of the
-					generating logger, this naming strategy makes it easy to identify
-					the origin of a log message.  However, this is only one possible,
-					albeit common, strategy for naming loggers. Log4cxx does not restrict
-					the possible set of loggers. The developer is free to name the
-					loggers as desired.
-				</p>
-
-				<p>
-					Nevertheless, naming loggers after the class where they are
-					located seems to be the best strategy known so far.
-				</p>
-			</subsection>
-		</section>
-
-		<section name="Appenders and Layouts">
-			<p>
-				The ability to selectively enable or disable logging requests based
-				on their logger is only part of the picture. Log4cxx allows logging
-				requests to print to multiple destinations. In log4cxx speak, an output
-				destination is called an <em>appender</em>. Currently, appenders exist
-				for the <a href="apidocs/classlog4cxx_1_1_console_appender.html">console</a>,
-				<a href="apidocs/classlog4cxx_1_1_file_appender.html">files</a>, GUI
-				components, <a href="apidocs/classlog4cxx_1_1net_1_1_socket_appender.html">remote socket</a>
-				servers, <a href="apidocs/classlog4cxx_1_1nt_1_1_n_t_event_log_appender.html"> NT Event Loggers</a>, and remote UNIX
-				<a href="apidocs/classlog4cxx_1_1net_1_1_syslog_appender.html">Syslog</a>
-				daemons. It is also possible to log <a href="apidocs/classlog4cxx_1_1_async_appender.html">asynchronously</a>.
-			</p>
-
-			<p>More than one appender can be attached to a logger.</p>
-
-			<p>
-				The <a href="apidocs/classlog4cxx_1_1_logger.html#a7c0629acee8dbd1251474bea15d7c9e2">addAppender</a>
-				method adds an appender to a given logger.
-
-				<strong>
-					Each enabled logging request for a given logger will be forwarded to all the
-					appenders in that logger as well as the appenders higher in the hierarchy.
-				</strong>
-				In other words, appenders are inherited additively from the logger hierarchy.
-				For example, if a console appender is added to the root logger, then all enabled
-				logging requests will at least print on the console. If in addition a file appender
-				is added to a logger, say <em>C</em>, then enabled logging requests for <em>C</em> and
-				<em>C</em>'s children will print on a file <em>and</em> on the console. It is possible
-				to override this default behavior so that appender accumulation is no longer additive
-				by <a href="apidocs/classlog4cxx_1_1_logger.html#a80f9397947dba9071ad485f178257c17">setting the additivity flag</a> to
-				<code>false</code>.
-			</p>
-
-			<p>The rules governing appender additivity are summarized below.</p>
-
-			<dl>
-				<dt><strong>Appender Additivity</strong></dt>
-
-				<dd>
-					The output of a log statement of logger <i>C</i> will go to all the appenders
-					in <i>C</i> and its ancestors. This is the meaning of the term "appender
-					additivity". However, if an ancestor of logger <i>C</i>, say <i>P</i>, has the
-					additivity flag set to <code>false</code>, then <i>C</i>'s output will be
-					directed to all the appenders in <i>C</i> and it's ancestors up to and
-					including <i>P</i> but, not the appenders in any of the ancestors of <i>P</i>.
-					<br /><br />
-					Loggers have their additivity flag set to <code>true</code> by default.
-				</dd>
-			</dl>
-
-			<p>The table below shows an example:</p>
-
-			<table align="center" border="3" cellpadding="10">
-				<tr rowspan="2">
-					<th>Logger Name </th>
-					<th>Added Appenders</th>
-					<th>Additivity Flag</th>
-					<th>Output Targets</th>
-					<th>Comment</th>
-				</tr>
-				<tr>
-					<td>root</td>
-					<td>A1</td>
-					<td>not applicable</td>
-					<td>A1</td>
-					<td>
-						The root logger is anonymous but can be accessed with the
-						log4cxx::Logger::getRootLogger() method. There is no default appender
-						attached to root.
-					</td>
-				</tr>
-				<tr>
-					<td>x</td>
-					<td>A-x1, A-x2</td>
-					<td>true</td>
-					<td>A1, A-x1, A-x2</td>
-					<td>Appenders of "x" and root.</td>
-				</tr>
-				<tr>
-					<td>x.y</td>
-					<td>none</td>
-					<td>true</td>
-					<td>A1, A-x1, A-x2</td>
-					<td>Appenders of "x" and root.</td>
-				</tr>
-				<tr>
-					<td>x.y.z</td>
-					<td>A-xyz1</td>
-					<td>true</td>
-					<td>A1, A-x1, A-x2, A-xyz1</td>
-					<td>Appenders in "x.y.z", "x" and root.</td>
-				</tr>
-				<tr>
-					<td>security</td>
-					<td>A-sec</td>
-					<td>
-						<span class="activity-flag-highlight">false</span>
-					</td>
-					<td>A-sec</td>
-					<td>
-						No appender accumulation since the additivity flag is set to <code>false</code>.
-					</td>
-				</tr>
-				<tr>
-					<td>security.access</td>
-					<td>none</td>
-					<td>true</td>
-					<td>A-sec</td>
-					<td>
-						Only appenders of "security" because the additivity flag in "security" is
-						set to <code>false</code>.
-					</td>
-				</tr>
-			</table>
-
-			<p>
-				More often than not, users wish to customize not only the output
-				destination but also the output format. This is accomplished by
-				associating a <em>layout</em> with an appender. The layout is
-				responsible for formatting the logging request according to the user's
-				wishes, whereas an appender takes care of sending the formatted output
-				to its destination.
-			</p>
-
-			<p>
-				The <a href="apidocs/classlog4cxx_1_1_pattern_layout.html">PatternLayout</a>, part
-				of the standard log4cxx distribution, lets the user specify the output
-				format according to conversion patterns similar to the C language
-				<code>printf</code> function.
-			</p>
-
-			<p>
-				For example, the PatternLayout with the conversion pattern "%r [%t]
-				%-5p %c - %m%n" will output something akin to:
-			</p>
-
-			<pre class="prettyprint linenums">
-176 [main] INFO org.foo.Bar - Located nearest gas station.</pre>
-
-			<p>
-				The first field is the number of milliseconds elapsed since the
-				start of the program.  The second field is the thread making the log
-				request.  The third field is the level of the log statement. The
-				fourth field is the name of the logger associated with the log
-				request. The text after the '-' is the message of the statement.
-			</p>
-		</section>
-
-		<section name="Configuration">
-			<p>
-				Inserting log requests into the application code requires a fair
-				amount of planning and effort. Observation shows that approximately 4
-				percent of code is dedicated to logging. Consequently, even moderately
-				sized applications will have thousands of logging statements embedded
-				within their code.  Given their number, it becomes imperative to
-				manage these log statements without the need to modify them manually.
-			</p>
-
-			<p>
-				The log4cxx environment is fully configurable programmatically.
-				However, it is far more flexible to configure log4cxx using
-				configuration files.  Currently, configuration files can be written in
-				XML or in Java properties (key=value) format.
-			</p>
-
-			<p>
-				Let us give a taste of how this is done with the help of an
-				imaginary application <code>MyApp</code> that uses log4cxx.
-			</p>
-
-			<pre class="prettyprint linenums">
-#include "com/foo/bar.h"
-using namespace com::foo;
-
-// include log4cxx header files.
-#include "log4cxx/logger.h"
-#include "log4cxx/basicconfigurator.h"
-#include "log4cxx/helpers/exception.h"
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-
-LoggerPtr logger(Logger::getLogger("MyApp"));
-
-int main(int argc, char **argv)
-{
-	int result = EXIT_SUCCESS;
-	try
-	{
-		// Set up a simple configuration that logs on the console.
-		BasicConfigurator::configure();
-
-		LOG4CXX_INFO(logger, "Entering application.")
-		Bar bar;
-		bar.doIt();
-		LOG4CXX_INFO(logger, "Exiting application.")
-	}
-	catch(Exception&amp;)
-	{
-		result = EXIT_FAILURE;
-	}
-
-	return result;
-}</pre>
-
-			<p>
-				<code>MyApp</code> begins by including log4cxx headers. It
-				then defines a static logger variable with the name <code>MyApp</code>
-				which happens to be the fully qualified name of the
-				class.
-			</p>
-
-			<p>
-				<code>MyApp</code> uses the <code>Bar</code> class defined in header
-				file <code>com/foo/bar.h</code>.
-			</p>
-
-				<pre class="prettyprint linenums">
-// file com/foo/bar.h
-#include "log4cxx/logger.h"
-
-namespace com {
-	namespace foo {
-		class Bar {
-			static log4cxx::LoggerPtr logger;
-
-			public:
-				void doIt();
-		}
-	}
-}</pre>
-
-				<pre class="prettyprint linenums">
-// file bar.cpp
-#include "com/foo/bar.h"
-
-using namespace com::foo;
-using namespace log4cxx;
-
-LoggerPtr Bar::logger(Logger::getLogger("com.foo.bar"));
-
-void Bar::doIt() {
-	LOG4CXX_DEBUG(logger, "Did it again!")
-}</pre>
-
-			<p>
-				The invocation of the <a href="apidocs/classlog4cxx_1_1_basic_configurator.html#a4f96a09e1372664e3556ce94ace4a70c">BasicConfigurator::configure</a>
-				method creates a rather simple log4cxx setup. This method is hardwired
-				to add to the root logger a <a href="apidocs/classlog4cxx_1_1_console_appender.html">
-				ConsoleAppender</a>. The output will be formatted using a
-				<a href="apidocs/classlog4cxx_1_1_pattern_layout.html">PatternLayout</a> set
-				to the pattern "%-4r [%t] %-5p %c %x - %m%n".
-			</p>
-
-			<p>
-				Note that by default, the root logger is assigned to
-				<code>Level::getDebug()</code>.
-			</p>
-
-			<p>
-				The output of MyApp is:
-			</p>
-
-			<pre class="prettyprint linenums">
-0    [12345] INFO  MyApp  - Entering application.
-36   [12345] DEBUG com.foo.Bar  - Did it again!
-51   [12345] INFO  MyApp  - Exiting application.</pre>
-
-			<p>
-				The previous example always outputs the same log information.
-				Fortunately, it is easy to modify <code>MyApp</code> so that the log
-				output can be controlled at run-time. Here is a slightly modified
-				version.
-			</p>
-
-			<pre class="prettyprint linenums">
-// file MyApp2.cpp
-
-#include "com/foo/bar.h"
-using namespace com::foo;
-
-// include log4cxx header files.
-#include "log4cxx/logger.h"
-#include "log4cxx/basicconfigurator.h"
-#include "log4cxx/propertyconfigurator.h"
-#include "log4cxx/helpers/exception.h"
-
-using namespace log4cxx;
-using namespace log4cxx::helpers;
-// Define a static logger variable so that it references the
-// Logger instance named "MyApp".
-LoggerPtr logger(Logger::getLogger("MyApp"));
-
-int main(int argc, char **argv)
-{
-	int result = EXIT_SUCCESS;
-	try
-	{
-		if (argc > 1)
-		{
-			// BasicConfigurator replaced with PropertyConfigurator.
-			PropertyConfigurator::configure(argv[1]);
-		}
-		else
-		{
-			BasicConfigurator::configure();
-		}
-
-		LOG4CXX_INFO(logger, "Entering application.")
-		Bar bar
-		bar.doIt();
-		LOG4CXX_INFO(logger, "Exiting application.")
-	}
-	catch(Exception&amp;)
-	{
-		result = EXIT_FAILURE;
-	}
-
-	return result;
-}</pre>
-
-			<p>
-				This version of <code>MyApp</code> instructs
-				<code>PropertyConfigurator</code> to parse a configuration file and
-				set up logging accordingly.
-			</p>
-
-			<p>
-				Here is a sample configuration file that results in exactly same
-				output as the previous <code>BasicConfigurator</code> based example.
-			</p>
-
-			<pre class="prettyprint linenums">
-# Set root logger level to DEBUG and its only appender to A1.
-log4j.rootLogger=DEBUG, A1
-
-# A1 is set to be a ConsoleAppender.
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-
-# A1 uses PatternLayout.
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n</pre>
-
-			<p>
-				It can be noticed that the PropertyConfigurator file format is the same as log4j.
-			</p>
-
-			<p>
-				Suppose we are no longer interested in seeing the output of any
-				component belonging to the <code>com::foo</code> package. The following
-				configuration file shows one possible way of achieving this.
-			</p>
-
-			<pre class="prettyprint linenums">
-log4j.rootLogger=DEBUG, A1
-log4j.appender.A1=org.apache.log4j.ConsoleAppender
-log4j.appender.A1.layout=org.apache.log4j.PatternLayout
-
-# <strong>Print the date in ISO 8601 format</strong>
-log4j.appender.A1.layout.ConversionPattern=<strong>%d</strong> [%t] %-5p %c - %m%n
-
-# Print only messages of level WARN or above in the package com.foo.
-<strong>log4j.logger.com.foo=WARN</strong></pre>
-
-			<p>
-				The output of <code>MyApp</code> configured with this file is shown below.
-			</p>
-
-			<pre class="prettyprint linenums">
-<strong>2000-09-07 14:07:41,508</strong> [12345] INFO  MyApp - Entering application.
-<strong>2000-09-07 14:07:41,529</strong> [12345] INFO  MyApp - Exiting application.</pre>
-
-			<p>
-				As the logger <code>com.foo.Bar</code> does not have an assigned
-				level, it inherits its level from <code>com.foo</code>, which
-				was set to WARN in the configuration file. The log statement from the
-				<code>Bar::doIt</code> method has the level DEBUG, lower than the
-				logger level WARN. Consequently, <code>doIt()</code> method's log
-				request is suppressed.
-			</p>
-
-			<p>
-				Here is another configuration file that uses multiple appenders.
-			</p>
-
-			<pre class="prettyprint linenums">
-log4j.rootLogger=debug, <strong>stdout, R</strong>
-
-log4j.appender.<strong>stdout</strong>=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-
-# Pattern to output the caller's file name and line number.
-log4j.appender.stdout.layout.ConversionPattern=%5p [%t] <strong>(%F:%L)</strong> - %m%n
-
-log4j.appender.<strong>R</strong>=org.apache.log4j.RollingFileAppender
-log4j.appender.R.File=example.log
-
-log4j.appender.R.MaxFileSize=<strong>100KB</strong>
-# Keep one backup file
-log4j.appender.R.MaxBackupIndex=1
-
-log4j.appender.R.layout=org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n</pre>
-
-			<p>
-				Calling the enhanced MyApp with the this configuration file will
-				output the following on the console.
-			</p>
-
-			<pre class="prettyprint linenums">
-INFO [12345] <strong>(MyApp2.cpp:31)</strong> - Entering application.
-DEBUG [12345] (Bar.h:16) - Doing it again!
-INFO [12345] (MyApp2.cpp:34) - Exiting application.</pre>
-
-			<p>
-				In addition, as the root logger has been allocated a second
-				appender, output will also be directed to the <code>example.log</code>
-				file. This file will be rolled over when it reaches 100KB. When
-				roll-over occurs, the old version of <code>example.log</code> is
-				automatically moved to <code>example.log.1</code>.
-			</p>
-
-			<p>
-				Note that to obtain these different logging behaviors we did not
-				need to recompile code. We could just as easily have logged to a UNIX
-				Syslog daemon, redirected all <code>com.foo</code> output to an NT
-				Event logger, or forwarded logging events to a remote log4cxx server,
-				which would log according to local server policy, for example by
-				forwarding the log event to a second log4cxx server.
-			</p>
-		</section>
-
-		<section name="Default Initialization Procedure">
-			<p>
-				The log4cxx library does not make any assumptions about its
-				environment. In particular, there are no default log4cxx
-				appenders. Under certain well-defined circumstances however, the
-				static inializer of the <code>Logger</code> class will attempt to
-				automatically configure log4cxx.
-			</p>
-
-			<p>
-				The exact default initialization algorithm is defined as follows:
-			</p>
-
-			<ol>
-				<li>
-					<p>
-						Set the configurationOptionStr string variable to the value of the
-						<strong>LOG4CXX_CONFIGURATION</strong> environment variable if set, otherwise
-						the value of the <strong>log4j.configuration</strong> environment variable
-						if set, otherwise the first of the following file names which exist in the
-						current working directory, "log4cxx.xml", "log4cxx.properties",
-						"log4j.xml" and "log4j.properties". If configurationOptionStr has not been
-						set, then disable logging.
-					</p>
-				</li>
-				<li>
-					<p>
-						Unless a custom configurator is specified using the
-						<strong>LOG4CXX_CONFIGURATOR_CLASS</strong> or <strong>log4j.configuratorClass</strong>
-						environment variable, the PropertyConfigurator will be used to configure
-						log4cxx unless the file name ends with the ".xml" extension,
-						in which case the DOMConfigurator will be used.
-						If a custom configurator is specified, the environment variable
-						should contain a fully qualified class name of a class that
-						implements the Configurator interface.
-					</p>
-				</li>
-			</ol>
-		</section>
-
-		<section name="Nested Diagnostic Contexts">
-			<p>
-				Most real-world systems have to deal with multiple clients
-				simultaneously. In a typical multithreaded implementation of such a
-				system, different threads will handle different clients. Logging is
-				especially well suited to trace and debug complex distributed
-				applications. A common approach to differentiate the logging output of
-				one client from another is to instantiate a new separate logger for
-				each client. This promotes the proliferation of loggers and
-				increases the management overhead of logging.
-			</p>
-
-			<p>
-				A lighter technique is to uniquely stamp each log request initiated
-				from the same client interaction. Neil Harrison described this method
-				in the book "Patterns for Logging Diagnostic Messages," in <em>Pattern
-				Languages of Program Design 3</em>, edited by R. Martin, D.  Riehle,
-				and F. Buschmann (Addison-Wesley, 1997).
-			</p>
-
-			<p>
-				To uniquely stamp each request, the
-				user pushes contextual information into the NDC, the abbreviation of
-				<em>Nested Diagnostic Context</em>. The NDC class is shown below.
-			</p>
-
-			<pre class="prettyprint linenums">
-namespace log4cxx {
-	class NDC {
-		public:
-			// pushes the value on construction and pops on destruction.
-			NDC(const std::string&amp; value);
-			NDC(const std::wstring&amp; value);
-
-			// Remove the top of the context from the NDC.
-			<strong>static</strong> LogString pop();
-
-			// Add diagnostic context for the current thread.
-			<strong>static</strong> void push(const std::string&amp; message);
-			<strong>static</strong> void push(const std::wstring&amp; message);
-	}
-}</pre>
-
-			<p>
-				The NDC is managed per thread as a <em>stack</em> of contextual
-				information. Note that all methods of the <code>log4cxx::NDC</code>
-				class are static. Assuming that NDC printing is turned on, every time
-				a log request is made, the appropriate log4cxx component will include
-				the <em>entire</em> NDC stack for the current thread in the log
-				output. This is done without the intervention of the user, who is
-				responsible only for placing the correct information in the NDC by
-				using the <code>push</code> and <code>pop</code> methods at a few
-				well-defined points in the code.  In contrast, the per-client logger
-				approach commands extensive changes in the code.
-			</p>
-
-			<p>
-				To illustrate this point, let us take the example of a servlet
-				delivering content to numerous clients. The servlet can build the NDC
-				at the very beginning of the request before executing other code. The
-				contextual information can be the client's host name and other
-				information inherent to the request, typically information contained
-				in cookies. Hence, even if the servlet is serving multiple clients
-				simultaneously, the logs initiated by the same code, i.e. belonging to
-				the same logger, can still be distinguished because each client
-				request will have a different NDC stack. Contrast this with the
-				complexity of passing a freshly instantiated logger to all code
-				exercised during the client's request.
-			</p>
-
-			<p>
-				Nevertheless, some sophisticated applications, such as virtual
-				hosting web servers, must log differently depending on the virtual
-				host context and also depending on the software component issuing the
-				request. Recent log4cxx releases support multiple hierarchy trees. This
-				enhancement allows each virtual host to possess its own copy of the
-				logger hierarchy.
-			</p>
-		</section>
-
-		<section name="Performance">
-			<p>
-				One of the often-cited arguments against logging is its
-				computational cost. This is a legitimate concern as even moderately
-				sized applications can generate thousands of log requests. Much
-				effort was spent measuring and tweaking logging performance. Log4cxx
-				claims to be fast and flexible: speed first, flexibility second.
-			</p>
-
-			<p>
-				The user should be aware of the following performance issues.
-			</p>
-
-			<ol>
-				<li>
-					<p>
-						<strong>Logging performance when logging is turned off.</strong>
-					</p>
-
-					<p>
-						When logging is turned off entirely or just for a set
-						of levels, the cost of a log request consists of a method
-						invocation plus an integer comparison.  The LOG4CXX_DEBUG and similar
-						macros suppress unnecessary expression evaluation if the
-						request is not enabled.
-					</p>
-				</li>
-
-				<li>
-					<p>
-						<strong>The performance of deciding whether to log or not to log when logging is turned on.</strong>
-					</p>
-
-					<p>
-						This is essentially the performance of walking the logger
-						hierarchy. When logging is turned on, log4cxx still needs to compare
-						the level of the log request with the level of the request
-						logger. However, loggers may not have an assigned
-						level; they can inherit them from the logger hierarchy. Thus,
-						before inheriting a level, the logger may need to search its
-						ancestors.
-					</p>
-
-					<p>
-						There has been a serious effort to make this hierarchy walk to
-						be as fast as possible. For example, child loggers link only to
-						their existing ancestors. In the <code>BasicConfigurator</code>
-						example shown earlier, the logger named <code>com.foo.Bar</code> is
-						linked directly to the root logger, thereby circumventing the
-						nonexistent <code>com</code> or <code>com.foo</code> loggers. This
-						significantly improves the speed of the walk, especially in "sparse"
-						hierarchies.
-					</p>
-
-					<p>
-						The cost of walking the hierarchy is typically 3
-						times slower than when logging is turned off entirely.
-					</p>
-				</li>
-				<li>
-					<p>
-						<strong>Actually outputting log messages</strong>
-					</p>
-
-					<p>
-						This is the cost of formatting the log output and sending it to
-						its target destination. Here again, a serious effort was made to
-						make layouts (formatters) perform as quickly as possible. The same
-						is true for appenders.
-					</p>
-				</li>
-			</ol>
-		</section>
-
-		<section name="Conclusions">
-			<p>
-				Apache Log4cxx is a popular logging package written in C++.  One of its
-				distinctive features is the notion of inheritance in loggers. Using
-				a logger hierarchy it is possible to control which log statements
-				are output at arbitrary granularity. This helps reduce the volume of
-				logged output and minimize the cost of logging.
-			</p>
-
-			<p>
-				One of the advantages of the log4cxx API is its manageability. Once
-				the log statements have been inserted into the code, they can be
-				controlled with configuration files. They can be selectively enabled
-				or disabled, and sent to different and multiple output targets in
-				user-chosen formats. The log4cxx package is designed so that log
-				statements can remain in shipped code without incurring a heavy
-				performance cost.
-			</p>
-		</section>
-	</body>
-</document>
\ No newline at end of file