<?xml version="1.0" ?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<document>

    <properties>
        <author email="nicko at apache dot org">Nicko Cadell</author>
        <title>Apache log4net: Release Notes</title>
    </properties>

    <meta name="keywords" content="log4net release notes, log4net"/>

    <body>

        <section id="main" name="Apache log4net&#x2122; Release Notes">

            <section id="2.0.9" name="2.0.9">
                <p>
                    Apache log4net 2.0.9 adds <code>netstandard2.0</code> support
                    and restructures the project to enable easier build as well as build
                    at AppVeyer. Project files have been updated to the modern Sdk format.
                </p>
                <section id="2.0.9-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href="https://issues.apache.org/jira/browse/LOG4NET-559">LOG4NET-559</a>] Add null checkes to avoid issues thrown by custom appenders</li>
                        <li>[<a href="https://issues.apache.org/jira/browse/LOG4NET-563">LOG4NET-563</a>] Site styling copied from log4j</li>
                    </ul>
                </section>
            </section>
            <section id="2.0.8" name="2.0.8">
                <p>
                    Apache log4net 2.0.8 fixes a
                    <code>LockRecursionException</code>
                    that could happen
                    inside the <code>FileAppender</code> under certain
                    circumstances. It also adds support for
                    <code>LogicalThreadContext</code>
                    to the .NET Standard
                    build based on <code>AsyncLocal</code> rather than
                    <code>CallContext</code>.
                </p>

                <section id="2.0.8-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-466'>LOG4NET-466</a>] - &quot;LockRecursionException:
                            A read lock may not be acquired with the write lock held in this mode.&quot; exception
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-550'>LOG4NET-550</a>] - Logging
                            recursively from an Appender not supported for NET_4_0 and MONO_4_0
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-551'>LOG4NET-551</a>] -
                            LockRecursionException when using File Appenders
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-554'>LOG4NET-554</a>] -
                            LogicalThreadContext was removed in .NETStandard
                        </li>
                    </ul>
                </section>

                <section id="2.0.8-new" name="New Features">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-553'>LOG4NET-553</a>] -
                            DebugAppender
                            configuration should give the possibility to disable outputting loggerName as category
                        </li>
                    </ul>
                </section>
            </section>

            <section id="2.0.7" name="2.0.7">
                <p>
                    Apache log4net 2.0.7 fixes a glitch in nuget packaging and
                    is otherwise identical to 2.0.6 (apart from the copyright
                    year and assembly version). If you are not using the nuget
                    package there is no reason to upgrade.
                </p>

                <section id="2.0.7-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-540'>LOG4NET-540</a>] - nuget
                            dependencies for .NET Standard leak into net46
                        </li>
                    </ul>
                </section>
            </section>

            <section id="2.0.6" name="2.0.6">

                <p>
                    The Apache log4net team is now responsible for the nuget
                    package, we've changed the version number of this release
                    to align the version numbers. Release 2.0.6 is supposed to
                    be compatible with 1.2.15.
                </p>

                <p>
                    The binary distributions no longer contain assemblies
                    built for the .NET Framework 1.x or Mono 1.x - you can
                    build those yourself using the source distribution.
                </p>

                <p>
                    Starting with 2.0.6 .NET Core - or more precisely
                    .NET Standard 1.3 - has become a supported platform. Please
                    note that several features of log4net are not available
                    when using the .NET Core version, see <a
                        href="framework-support.html#netstandard-1.3">framework
                    support
                </a> for details.
                </p>

                <section id="2.0.6-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-508'>LOG4NET-508</a>] - NAnt release
                            build is not optimized
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-512'>LOG4NET-512</a>] - Thread
                            safety
                            issue in Hierarchy.cs
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-527'>LOG4NET-527</a>] - broken link
                            on
                            config-examples.html
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-529'>LOG4NET-529</a>] - Possible
                            thread-safety bug in LoggingEvent
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-536'>LOG4NET-536</a>] - Can&#39;t
                            build
                            for NETCF-2.0
                        </li>
                    </ul>
                </section>
                <section id="2.0.6-enh" name="Improvements">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-530'>LOG4NET-530</a>] - Use UTC
                            internally to avoid ambiguous timestamps
                        </li>
                    </ul>
                </section>

                <section id="2.0.6-new" name="New Features">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-467'>LOG4NET-467</a>] - Is .NET
                            Core,
                            will be supported in the near future, or not
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-511'>LOG4NET-511</a>] - API to flush
                            appenders
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-526'>LOG4NET-526</a>] - Add
                            appSetting
                            conversion pattern to PatternString
                        </li>
                    </ul>
                </section>
            </section>

            <section id="1.2.15" name="1.2.15">
                <section id="1.2.15-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-462'>LOG4NET-462</a>] -
                            ReadOnlyPropertiesDictionary not thread safe
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-488'>LOG4NET-488</a>] - Fix tests
                            build
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-489'>LOG4NET-489</a>] -
                            AdoNetAppender
                            fails after upgrade to 2.0.4
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-490'>LOG4NET-490</a>] -
                            InterProcessLock
                            Tests fail
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-493'>LOG4NET-493</a>] - Log4net
                            1.2.14/ADO.NET appender throws exception when starting (1.2.13 with same config works fine)
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-494'>LOG4NET-494</a>] -
                            ArgumentOutOfRange with SQLite
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-495'>LOG4NET-495</a>] - Error when
                            BufferSize is &gt;1, parameter already defined
                        </li>
                    </ul>
                </section>
            </section>

            <section id="1.2.14" name="1.2.14">
                <section id="1.2.14-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-408'>LOG4NET-408</a>] - Correction
                            on
                            InterProcessLock
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-443'>LOG4NET-443</a>] -
                            Logger.CallAppenders
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-447'>LOG4NET-447</a>] -
                            MemoryAppender
                            class is not thread safe
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-455'>LOG4NET-455</a>] -
                            LogicalThreadContext does not flow correctly through async/await
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-479'>LOG4NET-479</a>] - Cannot
                            compile
                            log4net.vs2008
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-484'>LOG4NET-484</a>] -
                            System.ObjectDisposedException with FileAppender+InterProcessLock
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-485'>LOG4NET-485</a>] -
                            RollingFileAppender cannot be used by multiple process
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-486'>LOG4NET-486</a>] - Rolling File
                            Appender with &#39;maxSizeRollBackups&#39; and &#39;datePattern&#39; does not detect
                            existing
                            logs initially
                        </li>
                    </ul>
                </section>

                <section id="1.2.14-enh" name="Improvements">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-456'>LOG4NET-456</a>] - Include
                            debug
                            symbol files in release packages
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-457'>LOG4NET-457</a>] - SMTP
                            Appender
                            should trim leading and trailing separators from address fields
                        </li>
                    </ul>
                </section>

                <section id="1.2.14-new" name="New Features">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-473'>LOG4NET-473</a>] - Option for
                            file
                            extension in SmtpPickupDirAppender
                        </li>
                    </ul>
                </section>
            </section>

            <section id="1.2.13" name="1.2.13">

                <section id="1.2.13-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-132'>LOG4NET-132</a>] - Environment
                            variables are mistakenly case sensitive on windows
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-376'>LOG4NET-376</a>] - Race
                            condition
                            in AbsoluteTimeDateFormatter
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-393'>LOG4NET-393</a>] - Using
                            dynamic
                            methods with log4net causes NullReferenceException in StackFrameItem
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-399'>LOG4NET-399</a>] - Does not
                            build
                            for Compact Framework 2.0
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-404'>LOG4NET-404</a>] - assemblies
                            for
                            .NET 3.5 are missing ILogExtensions
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-405'>LOG4NET-405</a>] - SmtpAppender
                            encoding changes
                        </li>
                    </ul>

                </section>

                <section id="1.2.13-enh" name="Improvements">

                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-394'>LOG4NET-394</a>] - Lambda-based
                            ILog-Extensions should catch errors
                        </li>
                    </ul>

                </section>
            </section>

            <section id="1.2.12" name="1.2.12">

                <p>
                    The binary distributions no longer contain assemblies
                    built for the Compact Framework 2.0 - you can build
                    those yourself using the source distribution.
                </p>

                <section id="1.2.12-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-148'>LOG4NET-148</a>] -
                            ThreadContext
                            uses LocalDataStore to store ThreadSpecific data instead should be using [ThreadStatic]
                            variables.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-178'>LOG4NET-178</a>] - Log4Net
                            stops
                            logging after appdomain recycle of ASP.NET2.0 application
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-202'>LOG4NET-202</a>] -
                            AdoNetAppenderParameter.Size Property is not optional
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-218'>LOG4NET-218</a>] - Test
                            StringFormatTest.TestFormatString fails
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-220'>LOG4NET-220</a>] - multiple
                            users
                            overwrite existing log file when RollingFileAppender is rolling over date and minimal
                            locking is
                            used
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-228'>LOG4NET-228</a>] -
                            log4net.Util.HostName may throw System.Configuration.ConfigurationErrorsException in
                            System.Net.Dns.GetHostName(). The exception should be ignored.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-266'>LOG4NET-266</a>] -
                            AdoNetAppender
                            does not work on a IIS 7 website using Windows authentication
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-277'>LOG4NET-277</a>] - Registering
                            a
                            custom Object Renderer in configuration file
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-284'>LOG4NET-284</a>] - In a
                            multithreaded application, duplicate messages are output.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-294'>LOG4NET-294</a>] - Exception
                            rendering object type [System.OutOfMemoryException]
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-317'>LOG4NET-317</a>] -
                            LogicalThreadContext sometimes doesn&#39;t follow CallContext&#39;s logical thread
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-322'>LOG4NET-322</a>] - Conditional
                            compilation symbols for .net4 Release
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-323'>LOG4NET-323</a>] -
                            AbsoluteTimeDateFormatter caches string representation of now too aggressively
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-331'>LOG4NET-331</a>] -
                            AdoNetAppender
                            errors when writing Asp.net item when Request object is null
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-335'>LOG4NET-335</a>] - Lost the
                            ability
                            to monitor changes to logger config files when you call ConfigureAndWatch multiple times
                            with
                            different Config File Names - worked fine on 1.2.10.0
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-341'>LOG4NET-341</a>] -
                            RemotingAppender
                            Error
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-343'>LOG4NET-343</a>] -
                            ArgumentOutOfRangeException in log4net hierarchy on &quot;.&quot; logger name
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-347'>LOG4NET-347</a>] - Log4net not
                            working in an ASP.Net environment with medium trust
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-348'>LOG4NET-348</a>] -
                            System.IndexOutOfRangeException when StackFrameLevel is greater then StackFrames length
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-352'>LOG4NET-352</a>] - CS0419
                            during
                            build with Mono &gt;2.6
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-360'>LOG4NET-360</a>] -
                            EventLogAppender
                            can corrupt the event log on Windows Vista and higher if the string is longer than 31839
                            bytes
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-361'>LOG4NET-361</a>] -
                            RollingLogFileAppender does not correctly initialize the backup index when style is date or
                            composite
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-369'>LOG4NET-369</a>] -
                            preserveLogFileNameExtension is not considered when rolling over time after an application
                            restart
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-370'>LOG4NET-370</a>] -
                            RemoteSyslogAppender doesn&#39;t properly handle newline in log message
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-371'>LOG4NET-371</a>] - Log with
                            formatting doesn&#39;t call custom renderers (IObjectRenderer)
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-375'>LOG4NET-375</a>] - typo /
                            misspelling in log message
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-378'>LOG4NET-378</a>] - Rolling log
                            file
                            is overwritten when application is restarted
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-379'>LOG4NET-379</a>] -
                            NullReferenceException in FileAppender when file is not filled.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-382'>LOG4NET-382</a>] -
                            TargetInvocationException occurs because MESSAGE_SIZE fields in EventLogAppender are
                            initialized
                            in wrong order
                        </li>
                    </ul>
                </section>

                <section id="1.2.12-enh" name="Improvements">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-222'>LOG4NET-222</a>] - [PATCH]
                            Improve
                            AnsiColorTerminalAppender to support marking colors as Light
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-223'>LOG4NET-223</a>] - [PATCH]
                            Improve
                            AnsiColorTerminalAppender to support marking colors as Light
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-232'>LOG4NET-232</a>] - Use
                            ReaderWriterLockSlim instead of ReaderWriterLock.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-259'>LOG4NET-259</a>] - Log4Net does
                            not
                            create a new tab in Chainsaw
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-283'>LOG4NET-283</a>] -
                            OnlyOnceErrorHandler is not subclass-friendly
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-292'>LOG4NET-292</a>] - Managed
                            ColoredConsoleAppender for .NET2/Mono.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-315'>LOG4NET-315</a>] - SmtpAppender
                            -
                            Add support for ignoring certificate errors
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-316'>LOG4NET-316</a>] - Provide a
                            Layout
                            Pattern that is re-evaluated on each use
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-318'>LOG4NET-318</a>] - log4net
                            doesn&#39;t
                            pass verification
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-334'>LOG4NET-334</a>] - Appender
                            Faill
                            over
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-354'>LOG4NET-354</a>] - E-mail
                            encoding
                            configuration setting for SmtpAppender
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-362'>LOG4NET-362</a>] - [PATCH]
                            SystemInfo.AssemblyLocationInfo throws unhandled ArgumentException &quot;Absolute path
                            required&quot;
                            when exe is started via UNC path
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-386'>LOG4NET-386</a>] - Can&#39;t
                            access
                            ThreadContext properties
                        </li>
                    </ul>
                </section>

                <section id="1.2.12-new" name="New Features">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-290'>LOG4NET-290</a>] - Add
                            Lambda-based
                            ILog-Extensions (embedded log.IsEnabled)
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-342'>LOG4NET-342</a>] - Add a way to
                            prevent silent failure
                        </li>
                    </ul>
                </section>
            </section>

            <section id="1.2.11" name="1.2.11">
                <p>
                    log4net 1.2.11 is not only a bugfix release, it also
                    adds support for Microsoft&#xae; .NET 4.0 as well as the client profiles
                    of .NET 3.5 and .NET 4.0.
                </p>

                <p>
                    Starting with this release log4net uses a new strong
                    name key but we also provide a binary distribution using
                    the "old" strong name key of log4net 1.2.10 and earlier.
                    See <a href="faq.html#two-snks">the FAQ</a> for details.
                </p>

                <p>
                    The binary distributions no longer contain assemblies
                    built for the Compact Framework 1.0 or the Shared Source
                    CLI - you can build those yourself using the source
                    distribution.
                </p>

                <section id="1.2.11-breaking" name="Breaking Changes">
                    <p>
                        The signature of
                        <code>ILoggerFactory.CreateLogger</code>
                        has changed.
                    </p>
                </section>

                <section id="1.2.11-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-76'>LOG4NET-76</a>] -
                            TextWriterAdapter
                            is not thread safe
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-79'>LOG4NET-79</a>] -
                            SecurityException
                            thrown in LogicalThreadContextProperties GetProperties
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-81'>LOG4NET-81</a>] -
                            LoggerRepositorySkeleton&#39;s OnConfigurationChanged method always raises its event with
                            EventArgs.Empty instead of passing through its EventArgs parameter.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-93'>LOG4NET-93</a>] - Typos for node
                            name in tutorial, excess quote, invalid XML
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-94'>LOG4NET-94</a>] - Incorrect
                            config
                            file for ..\examples\net\1.0\Tutorials\ConsoleApp
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-95'>LOG4NET-95</a>] -
                            Level.CompareTo()
                            may result a wrong Value -&gt; sorting of Levels does not work
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-113'>LOG4NET-113</a>] -
                            SystemInfo.GetTypeFromString() raises NotSupportedException
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-123'>LOG4NET-123</a>] -
                            EnvironmentPatternConverter does not expand User or System level environment variables under
                            Windows
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-126'>LOG4NET-126</a>] - Links on the
                            log4net Examples page do not work, including the overview link explaining why the other
                            links do
                            not work
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-128'>LOG4NET-128</a>] - Either
                            documentation is incorrect or a bug in SmtpAppender
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-129'>LOG4NET-129</a>] -
                            EventLogAppender
                            EventID parsing does not handle Active Properties properly
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-135'>LOG4NET-135</a>] - Bad example
                            code
                            in documentation
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-137'>LOG4NET-137</a>] -
                            log4net.Filter.LevelMatchFilter does not work anymore
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-143'>LOG4NET-143</a>] - Invalid
                            Repository Config Uri composition from &quot;log4net.Config&quot; application setting
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-146'>LOG4NET-146</a>] -
                            System.NullReferenceException on FindAndRender object
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-158'>LOG4NET-158</a>] -
                            XMLConfigurator.ConfigureAndWatch() leaks resources if called multiple times
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-167'>LOG4NET-167</a>] -
                            ArrayOutOfBounds
                            Exception in MemoryAppender.getEvents()
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-212'>LOG4NET-212</a>] - Threading
                            bug in
                            the PatternConverter.cs
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-214'>LOG4NET-214</a>] -
                            EventLogAppender
                            should also use config file to set EventId
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-215'>LOG4NET-215</a>] - Exception on
                            Convert for return %class{1} name
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-229'>LOG4NET-229</a>] - Japanese
                            characters get garbled with log4net.Layout.XmlLayoutSchemaLog4j
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-241'>LOG4NET-241</a>] - Issue
                            tracking
                            page does not link to project
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-242'>LOG4NET-242</a>] - Download
                            page
                            does not have link to KEYS file
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-243'>LOG4NET-243</a>] - broken link
                            on
                            http://logging.apache.org/log4net/release/example-apps.html
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-244'>LOG4NET-244</a>] -
                            SmtpAppender.To
                            Property has incorrect delimiter
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-257'>LOG4NET-257</a>] - Visual
                            Studio
                            2010 .NET 4.0 Application does not copy log4net lib to bin directory
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-265'>LOG4NET-265</a>] -
                            RemoteFileAppender Tests fail on Windows 7
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-274'>LOG4NET-274</a>] - log4net
                            doesn&#39;t
                            log when running a .Net 4.0 Windows application built in Release mode
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-297'>LOG4NET-297</a>] -
                            AppenderSkeleton.RequiresLayout docs and implementation don&#39;t match
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-300'>LOG4NET-300</a>] - FilterTest
                            doesn&#39;t
                            compile for .Net 2.0
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-301'>LOG4NET-301</a>] - Unit tests
                            fail
                            on a clean checkout on .NET 2.0 using NAnt
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-310'>LOG4NET-310</a>] -
                            EventLogAppender&#39;s
                            ActivateOptions throws SecurityException on Vista/Win2k3 and later when not run as
                            administrator
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-311'>LOG4NET-311</a>] - MinimalLock
                            and
                            AppendToFile=false don&#39;t work together in trunk&#39;s FileAppender
                        </li>
                    </ul>
                </section>

                <section id="1.2.11-enh" name="Improvements">
                    <ul>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-31'>LOG4NET-31</a>] - Allow user to
                            pass
                            in additional parameters to &lt;converter&gt; node via some kind of &lt;property&gt; tag
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-38'>LOG4NET-38</a>] -
                            EventLogAppender:
                            Add support for setting the Category on Event Log messages.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-66'>LOG4NET-66</a>] -
                            PreserveFileExtension with StaticFileName
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-77'>LOG4NET-77</a>] - A small
                            improvement of log4net.Layout.Pattern.ExceptionPatternConverter - added &#39;Option&#39;
                            propery
                            support
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-88'>LOG4NET-88</a>] - support .NET
                            2.0
                            connectionStrings configuration section
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-96'>LOG4NET-96</a>] - Expose the
                            Message, Exception, and ErrorCode properties of OnlyOnceErrorHandler.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-97'>LOG4NET-97</a>] - Make Hierarchy&#39;s
                            ILoggerFactory aware of the repository&#39;s LevelMap
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-98'>LOG4NET-98</a>] - Update header
                            comment in files to be compliant with new Apache header requirements:
                            http://www.apache.org/legal/src-headers.html for 11/1/2006 deadline
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-100'>LOG4NET-100</a>] -
                            IPAddressConverter improvement for .NET 2 or .NET 3
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-106'>LOG4NET-106</a>] -
                            TraceAppender :
                            Add switch to disable using logger name as trace category
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-112'>LOG4NET-112</a>] - Add support
                            to
                            the UdpAppender for IP v6 remote addresses
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-131'>LOG4NET-131</a>] - Add Cc and
                            Bcc
                            support to SmtpAppender
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-141'>LOG4NET-141</a>] - Add
                            CreateConnection method to AdoNetAppender to allow subclasses to have control of
                            IDbConnection.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-153'>LOG4NET-153</a>] - Make it
                            easier
                            to configure multiple appenders in code using BasicConfigurator
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-157'>LOG4NET-157</a>] - FAQ for
                            getting
                            the fully-qualified name of a class
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-164'>LOG4NET-164</a>] - using a
                            named
                            mutex for file appenders
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-170'>LOG4NET-170</a>] -
                            Documentation
                            improvement re: fixing and active properties
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-246'>LOG4NET-246</a>] - Make it
                            possible
                            to choose whether or not to watch configuration files specified using the &quot;log4net.Config&quot;
                            appsetting key
                        </li>
                    </ul>

                </section>
                <section id="1.2.11-new" name="New Features">
                    <ul>
                        <li>The various static <code>Configure</code> methods of the <code>Configurator</code> classes
                            now
                            return collections of configuration messages rather than <code>void</code>.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-59'>LOG4NET-59</a>] - add the
                            ability to
                            roll files based on universal time (UTC).
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-64'>LOG4NET-64</a>] - add the
                            ability to
                            preserve the log file name extension when rolling the log file.
                        </li>
                        <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-87'>LOG4NET-87</a>] - Support
                            ASP.Net
                            related PatternConverters to allow items from the HttpContext.Current.Session, Cache,
                            Request,
                            etc. to be captured.
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-92'>LOG4NET-92</a>] - Build for
                                Compact Framework 2.0
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-107'>LOG4NET-107</a>] - Added
                                ExceptionEvaluator
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-115'>LOG4NET-115</a>] - Expand
                                UserAppDataPath in filename
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-116'>LOG4NET-116</a>] - allow
                                smtp
                                to ssl authenticate and with certificates.
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-154'>LOG4NET-154</a>] - Add a
                                StackTracePatternConverter to display method calls leading up to log message
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-155'>LOG4NET-155</a>] - Add
                                TimeEvaluator
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-168'>LOG4NET-168</a>] - New
                                property
                                ReplyTo address for the SmtpAppender required
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-176'>LOG4NET-176</a>] -
                                Buildable
                                with VS 2008 and .NET FW 3.5
                            </li>
                            <li>[<a href='https://issues.apache.org/jira/browse/LOG4NET-233'>LOG4NET-233</a>] - Support
                                .NET
                                4.0 including Client Profile
                            </li>
                        </li>
                    </ul>
                </section>

            </section>

            <section id="1.2.10" name="1.2.10">

                <section id="1.2.10-bug" name="Bug Fixes">
                    <ul>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-21'>LOG4NET-21</a>] -
                            RemotingAppender
                            fails once NDC becomes empty
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-22'>LOG4NET-22</a>] - XmlLayout
                            allows
                            output of invalid control characters
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-23'>LOG4NET-23</a>] -
                            example-apps.html
                            links are off by one folder level
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-25'>LOG4NET-25</a>] -
                            RollingFileAppender
                            can fail if RollOverIfDateBoundaryCrossing required
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-28'>LOG4NET-28</a>] - AdoNetAppender
                            does
                            not support inserting NULL into columns
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-29'>LOG4NET-29</a>] -
                            LevelMatchFilter
                            should return Neutral when no match is found
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-32'>LOG4NET-32</a>] - AdoNetAppender
                            losing first entry
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-35'>LOG4NET-35</a>] - Exception
                            rendering
                            ThreadContextStack if null value pushed into stack
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-36'>LOG4NET-36</a>] -
                            System.Diagnostics.Trace may throw exception if AppDomain does not have config file
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-40'>LOG4NET-40</a>] -
                            RollingFileAppender
                            does not limit files to MaxSizeRollBackups when CountDirection is 1
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-41'>LOG4NET-41</a>] -
                            RollingFileAppender
                            roll over date fail
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-42'>LOG4NET-42</a>] - Serialised
                            LoggingEvent does not preserve the Fix flags
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-43'>LOG4NET-43</a>] - Specifying an
                            empty
                            string as a property in the config file results in an error
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-44'>LOG4NET-44</a>] - XmlLayout emits
                            all
                            properties under a node named global-properties, rather than just properties.
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-49'>LOG4NET-49</a>] -
                            CountingQuietTextWriter does not count strings written with WriteLine
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-50'>LOG4NET-50</a>] -
                            Process.StartTime
                            hangs on some systems
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-60'>LOG4NET-60</a>] - Bug in
                            RollingFileAppender.cs causing failure to timely roll files on monthly interval
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-63'>LOG4NET-63</a>] - 1.2.9.0
                            Documentation typos
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-65'>LOG4NET-65</a>] - Unhandled
                            SecurityException exception for FileIOPermission while loading configuration file
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-67'>LOG4NET-67</a>] - CVE-2006-0743
                            Security vulnerability in LocalSyslogAppender
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-69'>LOG4NET-69</a>] - Exception
                            thrown
                            when *Format methods are given a malformed format string
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-70'>LOG4NET-70</a>] - CoreDll.dll
                            referenced with different capitalisation
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-73'>LOG4NET-73</a>] -
                            ADONetAppender.ActivateOptions() leaks database connection when called multiple times
                        </li>
                    </ul>
                </section>

                <section id="1.2.10-new" name="New Features">
                    <ul>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-11'>LOG4NET-11</a>] - Add Flush
                            command
                            to API
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-24'>LOG4NET-24</a>] - Programmatic
                            flush
                            of BufferingAppenderSkeleton buffer
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-37'>LOG4NET-37</a>] - Allow the
                            RepositorySelector type to be specified using the AppSettings config
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-46'>LOG4NET-46</a>] - Support
                            appenders
                            that can output multiple events efficiently
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-51'>LOG4NET-51</a>] - WmiAppender
                        </li>
                    </ul>
                </section>

                <section id="1.2.10-enh" name="Improvements">
                    <ul>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-3'>LOG4NET-3</a>] - Support per event
                            patterns in FileAppender File name
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-13'>LOG4NET-13</a>] - Allow
                            SMTPAppender
                            to have replaceable parameters in Subject
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-15'>LOG4NET-15</a>] - Email high
                            "importance" priority setting with SmtpAppender
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-17'>LOG4NET-17</a>] - Line-wrapping
                            Appender Layouts
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-33'>LOG4NET-33</a>] - Ability to use
                            global property to point to log4net configuration file
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-34'>LOG4NET-34</a>] - Allow xml
                            config
                            values to be set via XmlNodeType.CDATA or XmlNodeType.Text rather than just value="foo"
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-45'>LOG4NET-45</a>] - PluginAttribute
                            does not allow plugin type to be specified as a Type, only as a string
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-52'>LOG4NET-52</a>] - Allow XML
                            configurator to set properties of type Object
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-53'>LOG4NET-53</a>] - Allow
                            repository
                            properties to be set in the config file
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-56'>LOG4NET-56</a>] - Support
                            rendering
                            IEnumerator objects as well as ICollections
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-58'>LOG4NET-58</a>] - Support clean
                            build
                            on .NET 2.0
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-72'>LOG4NET-72</a>] - Performance of
                            ILog.xxxFormat methods
                        </li>
                        <li>[<a href='http://issues.apache.org/jira/browse/LOG4NET-74'>LOG4NET-74</a>] - Change
                            MemoryAppender member variables to protected
                        </li>
                    </ul>
                </section>

            </section>

            <section id="1.2.9" name="1.2.9 Beta">

                <section id="1.2.9-breaking" name="Breaking Changes">
                    <h3>Renamed namespaces</h3>
                    <p>
                        Renamed namespace <span class="code">log4net.spi</span> to <span class="code">
                        log4net.Core</span>.
                        Renamed namespace <span class="code">log4net.helpers</span> to <span class="code">
                        log4net.Util</span>.
                    </p>
                    <h3>Renamed config classes and attributes</h3>
                    <p>
                        In the <span class="code">log4net.Config</span> namespace the <span class="code">
                        DOMConfigurator</span>,
                        <span class="code">DOMConfiguratorAttribute</span>, <span class="code">DomainAttribute</span>,
                        and <span class="code">AliasDomainAttribute</span> have been marked as obsolete. These types are
                        still available and functional in this release.
                    </p>
                    <p>
                        The <span class="code">XmlConfigurator</span> and
                        <span class="code">XmlConfiguratorAttribute</span>
                        types replace <span class="code">DOMConfigurator</span> and
                        <span class="code">DOMConfiguratorAttribute</span>. The
                        <span class="code">RepositoryAttribute</span>
                        and <span class="code">AliasRepositoryAttribute</span> types replace
                        <span class="code">DomainAttribute</span>
                        and <span class="code">AliasDomainAttribute</span>.
                    </p>
                    <h3>Fixed pascal casing of type names</h3>
                    <p>
                        Renamed <span class="code">AdoNetAppender</span>, <span class="code">AspNetTraceAppender</span>,
                        <span class="code">SmtpAppender</span>, <span class="code">Iso8601DateFormatter</span>,
                        <span class="code">MdcFilter</span>, and <span class="code">NdcFilter</span>.
                        Note that the config file type resolver is case insensitive so this is only a breaking change
                        for code that programmatically creates a type that has been renamed.
                    </p>
                    <h3>Layouts changed to stream their output to a
                        <span class="code">TextWriter</span>
                    </h3>
                    <p>
                        Layouts have been changed to format their output to a
                        <span class="code">TextWriter</span>
                        rather than return a string. This increases performance and reduces temporary object creation.
                    </p>
                    <h3>C style string escapes no longer supported by config parser</h3>
                    <p>
                        The XML config parser no longer supports decoding C style escape sequences in strings.
                        Previously sequences like <span class="code">\n</span> and
                        <span class="code">\\</span>
                        where decoded. Instead use the appropriate XML encodings as required.
                    </p>
                </section>

                <section id="1.2.9-new" name="New Features">
                    <h3>New CLI build</h3>
                    <p>
                        A new log4net assembly is built that targets all CLI 1.0 compatible runtimes.
                        This build is essentially a common subset of the Mono 1.0 and .NET 1.0 builds.
                        It is built using the MS .NET 1.0 compiler and libraries but does not use any
                        platform specific APIs.
                    </p>
                    <p>
                        This build is only available in release configuration and can be found at
                        <span class="code">bin\cli\1.0\release</span>.
                    </p>
                    <h3>Logging contexts</h3>
                    <p>
                        Logging contexts can be used to record contextual data that is relevant to the current
                        process. Logging contexts are both an extension of the concepts embodied in the
                        <span class="code">MDC</span>
                        and <span class="code">NDC</span> and a replacement for
                        them. The <span class="code">MDC</span> and <span class="code">NDC</span> have been
                        reimplemented to use the <span class="code">ThreadContext</span> as storage.
                    </p>
                    <p>
                        The logging contexts provide a single unified view that cuts across different
                        scopes within an application.
                        The contexts are layered in the following order of narrowing scope:
                        <span class="code">GlobalContext</span>, <span class="code">ThreadContext</span>,
                        <span class="code">LogicalThreadContext</span>, and <span class="code">LoggingEvent</span>.
                        Context values specified in a narrower scope hide the matching value in a wider scope.
                    </p>
                    <h3>
                        <span class="code">PatternLayout</span>
                        customization and long pattern names
                    </h3>
                    <p>
                        The <span class="code">PatternLayout</span> now supports long pattern names.
                        These pattern names are significantly more readable than the single character patterns.
                    </p>
                    <p>
                        The <span class="code">PatternLayout</span> now supports custom patterns. New patterns
                        can be defined in the config file:
                    </p>
                    <div class="syntax">
                        <pre class="code">
                            &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt;

                            &lt;converter&gt;
                            &lt;name value=&quot;myConverter&quot; /&gt;
                            &lt;type value=&quot;TestApp.MyPatternConverter, TestApp&quot; /&gt;
                            &lt;/converter&gt;

                            &lt;conversionPattern value=&quot;%-5level %logger - %myConverter - %message%newline&quot; /&gt;
                            &lt;/layout&gt;
                        </pre>
                    </div>
                    <p>
                        The above config defines a custom pattern called
                        <span class="code">myConverter</span>
                        which is bound to the
                        <span class="code">TestApp.MyPatternConverter, TestApp</span>
                        type. This type must extend the
                        <span class="code">log4net.Util.PatternConverter</span>
                        base class. The custom pattern can then be used in the pattern string.
                    </p>
                    <p>
                        For full details see the SDK Reference entry: <a
                            href="sdk/html/T_log4net_Layout_PatternLayout.htm">
                        log4net.Layout.PatternLayout</a>.
                    </p>
                    <h3>
                        <span class="code">PatternString</span>
                        for pattern based configuration
                    </h3>
                    <p>
                        A new pattern based type, <span class="code">PatternString</span>, can be used in
                        the config file to set string properties using a pattern syntax. For example the
                        File property of the FileAppender could be set as follows:
                    </p>
                    <div class="syntax">
                        <pre class="code">
                            &lt;file type=&quot;log4net.Util.PatternString&quot;&gt;

                            &lt;converter&gt;
                            &lt;name value=&quot;folder&quot; /&gt;
                            &lt;type value=&quot;TestApp.SpecialFolderPatternConverter,TestApp&quot; /&gt;
                            &lt;/converter&gt;

                            &lt;conversionPattern value=&quot;%folder{LocalApplicationData}\log-file.txt&quot; /&gt;
                            &lt;/file&gt;
                        </pre>
                    </div>
                    <p>
                        The code for the
                        <span class="code">SpecialFolderPatternConverter</span>
                        is as follows:
                    </p>
                    <div class="syntax">
                        <pre class="code">
                            public class SpecialFolderPatternConverter : log4net.Util.PatternConverter
                            {
                            override protected void Convert(System.IO.TextWriter writer, object state)
                            {
                            Environment.SpecialFolder specialFolder =
                            (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), base.Option, true);

                            writer.Write(Environment.GetFolderPath(specialFolder));
                            }
                            }
                        </pre>
                    </div>
                    <p>
                        For full details see the SDK Reference entry: <a
                            href="sdk/html/T_log4net_Util_PatternString_htm">
                        log4net.Util.PatternString</a>.
                    </p>
                    <h3>Loading configuration from a URI</h3>
                    <p>
                        The <span class="code">XmlConfigurator</span> methods now support loading the
                        configuration data from a URI. Config can be loaded from any URI supported by the
                        <span class="code">System.Net.WebRequest</span>
                        class.
                    </p>
                    <h3>Support for No-Touch deployment</h3>
                    <p>
                        Log4net supports configuring No-Touch deployment applications using the
                        <span class="code">XmlConfiguratorAttribute</span>. If a relative config file
                        or extension is specified then this is resolved relative to the deployment
                        URI.
                    </p>
                    <h3>Config file parser enhancements</h3>
                    <p>
                        The config file parser has been enhanced to support specifying the property subtype, or
                        intermediate
                        type,
                        directly on the property element, for example:
                    </p>
                    <div class="syntax">
                        <pre class="code">
                            &lt;layout type=&quot;log4net.Layout.PatternLayout&quot; value=&quot;%message%newline&quot;
                            /&gt;
                        </pre>
                    </div>
                    <p>
                        Implicit conversion will be attempted between the value string and the type specified,
                        and then again between the type and the target property type.
                    </p>
                    <h3>.NET string formatting syntax</h3>
                    <p>
                        Added .NET <span class="code">String.Format</span> style formatting syntax methods to
                        the <span class="code">ILog</span> interface. The new methods are:
                        <span class="code">DebugFormat</span>, <span class="code">InfoFormat</span>,
                        <span class="code">WarnFormat</span>,
                        <span class="code">ErrorFormat</span>
                        and <span class="code">FatalFormat</span>.
                    </p>
                    <h3>Customizable levels</h3>
                    <p>
                        Levels are defined by the repository <span class="code">LevelMap</span>. The defined
                        levels, the relative ordering of levels and level display names can be configured on
                        a per-repository basis.
                    </p>
                    <h3>Per-appender security contexts</h3>
                    <p>
                        Appenders that interact with controlled platform resources, e.g. files, can be
                        configured to use a separate security context when accessing these resources.
                        The calling thread may not have appropriate privileges to access the resource a
                        custom <span class="code">SecurityContext</span> can be used to elevate the
                        privileges of the appender. The
                        <span class="code">WindowsSecurityContext</span>
                        is used to specify alternative credentials on the Windows platform.
                    </p>
                    <h3>Added new appenders</h3>
                    <dl>
                        <dt>
                            <span class="code">AnsiColorTerminalAppender</span>
                        </dt>
                        <dd>
                            <p>
                                The <span class="code">AnsiColorTerminalAppender</span> writes events to
                                the application's ANSI terminal window. It can be configured to specify
                                the text and background colors for different level events. Note that Console
                                applications running on Windows do not have an ANSI terminal window and
                                should use the <span class="code">ColoredConsoleAppender</span> instead.
                            </p>
                        </dd>
                        <dt>
                            <span class="code">LocalSyslogAppender</span>
                        </dt>
                        <dd>
                            <p>
                                Logs events to a local syslog service. This appender uses the POSIX libc syslog
                                library functions. If these functions are not available on the local system then
                                this appender will not work!
                            </p>
                        </dd>
                        <dt>
                            <span class="code">RemoteSyslogAppender</span>
                        </dt>
                        <dd>
                            <p>
                                The <span class="code">RemoteSyslogAppender</span> uses the BSD syslog protocol to
                                log to a syslog daemon. The syslogd listens for for messages on UDP port 514.
                            </p>
                        </dd>
                        <dt>
                            <span class="code">TelnetAppender</span>
                        </dt>
                        <dd>
                            <p>
                                The <span class="code">TelnetAppender</span> accepts socket connections and streams
                                logging messages back to the client. The output is provided in a telnet-friendly way
                                so that a log can be monitored over a TCP/IP socket.
                                This allows simple remote monitoring of application logging.
                            </p>
                        </dd>
                    </dl>
                    <h3>Added new <span class="code">LoggerMatchFilter</span> filter
                    </h3>
                    <p>
                        Added <span class="code">LoggerMatchFilter</span> which matches a string against
                        the event's logger name.
                    </p>
                    <h3>Pluggable file locking models for the
                        <span class="code">FileAppender</span>
                    </h3>
                    <p>
                        The <span class="code">FileAppender</span> (and by extension the
                        <span class="code">RollingFileAppender</span>) now support pluggable file
                        locking models. The default model, <span class="code">ExclusiveLock</span>,
                        maintains the current exclusive file locking behavior. An alternative
                        model, <span class="code">MinimalLock</span>, can be used to support writing to
                        a single output file from multiple processes.
                    </p>
                    <p>
                        For full details see the SDK Reference entry: <a
                            href="sdk/html/T_log4net_Appender_FileAppender_LockingModel.htm">
                        log4net.Appender.FileAppender.LockingModel</a>.
                    </p>
                    <h3>
                        <span class="code">RollingFileAppender</span>
                        roll once
                    </h3>
                    <p>
                        The <span class="code">RollingFileAppender</span> now supports a new
                        rolling style, <span class="code">Once</span>. In this mode the appender
                        will roll the file once per run.
                    </p>
                    <h3>
                        <span class="code">SmtpAppender</span>
                        authentication
                    </h3>
                    <p>
                        On the .NET 1.1 platform only, the <span class="code">SmtpAppender</span> supports
                        authenticating
                        against the mail server using either username and password or integrated NTLM authentication.
                    </p>
                    <h3>
                        <span class="code">AdoNetAppender</span>
                        ReconnectOnError
                    </h3>
                    <p>
                        Added new configuration property to <span class="code">AdoNetAppender</span>.
                        Setting <span class="code">ReconnectOnError</span> to
                        <span class="code">true</span>
                        will force the appender to attempt to reconnect to the database if the connection
                        is lost.
                    </p>
                    <h3>
                        <span class="code">UdpAppender</span>
                        hostname support
                    </h3>
                    <p>
                        The <span class="code">UdpAppender</span> config property
                        <span class="code">RemoteAddress</span>
                        can now be specified as a DNS hostname string. The hostname is resolved to an IP address.
                    </p>
                </section>

                <section id="1.2.9-other" name="Other Changes">
                    <h3>FxCop compliance</h3>
                    <p>
                        Updates to bring the internal code in line with the current FxCop rules.
                    </p>
                    <h3>Separate NUnit tests</h3>
                    <p>
                        Moved the NUnit tests into a separate project, <span class="code">log4net.Tests</span>.
                    </p>
                    <h3>Bug Fixes</h3>
                    <dl>
                        <dt>
                            <span class="code">RemotingAppender</span>
                        </dt>
                        <dd>
                            <p>
                                Sends events from a <span class="code">ThreadPool</span> thread
                                rather than the calling thread to prevent transfer,
                                and potential loss, of the <span class="code">CallContext</span>.
                            </p>
                        </dd>
                        <dt>
                            <span class="code">RollingFileAppender</span>
                        </dt>
                        <dd>
                            <p>
                                Fixed date rolling period detection for non UTC timezones.
                            </p>
                        </dd>
                        <dt>
                            <span class="code">ColoredConsoleAppender</span>
                        </dt>
                        <dd>
                            <p>
                                Updated to support writing more than 30,000 chars in a single message.
                                Fixed background color overspill if the console window needs to
                                scroll the contents.
                            </p>
                        </dd>
                    </dl>
                </section>

            </section>

            <section id="1.2.0b8" name="1.2.0 Beta 8">
                <h3>Changed assembly name to
                    <span class="code">log4net</span>
                </h3>
                <p>
                    The build output is now
                    <span class="code">log4net.dll</span>
                    for all frameworks. This is a breaking change.
                </p>
                <p>
                    To resolve cross platform and cross version issues we have
                    changed the log4net assembly to use a common name for all
                    frameworks. The assembly friendly name is now <span class="code">log4net</span>.
                    The builds for each framework can now be differentiated
                    by the assembly title. This includes the name of the framework
                    that the assembly was built on.
                </p>
                <h3>Combined Release and ReleaseStrong builds</h3>
                <p>
                    The Release and ReleaseStrong builds have been consolidated into
                    a single build called Release. This Release build is strongly named.
                </p>
                <h3>New Appender: ColoredConsoleAppender</h3>
                <p>
                    The <span class="code">ColoredConsoleAppender</span> writes events to the
                    application's console. It can be configured to specify the text and background
                    colors for different level events.
                </p>
                <h3>New Appender: SmtpPickupDirAppender</h3>
                <p>
                    The <span class="code">SmtpPickupDirAppender</span> generates SMTP compliant
                    messages and writes them to a local directory. These files can then be read
                    by an SMTP agent (e.g. the IIS SMTP Agent) and delivered.
                </p>
                <h3>New Layout: XmlLayoutSchemaLog4j</h3>
                <p>
                    This new layout formats the logging events as XML which complies with
                    the Apache log4j&#x2122; event dtd. This can be used to transfer log event from log4net
                    to log4j. Currently the only appender that can communicate directly with
                    log4j is the <span class="code">UdpAppender</span>.
                </p>
                <h3>New PatternLayout conversion characters</h3>
                <p>
                    Added support for capturing the current thread principal name and the
                    app domain friendly name for each logging event.
                </p>
                <dl>
                    <dt>%a</dt>
                    <dd>
                        Used to output the friendly name of the AppDomain where the
                        logging event was generated.
                    </dd>
                    <dt>%u</dt>
                    <dd>
                        Used to output the user name for the currently active user
                        (<span class="code">Principal.Identity.Name</span>).
                    </dd>
                </dl>
                <h3>Types specified in the config file are now loaded ignoring case</h3>
                <p>
                    All types specified in the configuration files are now loaded
                    using a case insensitive method.
                </p>
                <h3>Fine grained fixing for buffered events</h3>
                <p>
                    The <span class="code">LoggingEvent</span> now supports fine grained
                    fixing of data that needs to be accessed outside the append context,
                    e.g. when an event is buffered. The new
                    <span class="code">Fix</span>
                    property takes a combination of the
                    <span class="code">FixFlags</span>
                    enumeration values.
                </p>
                <h3>Code updated inline with FxCop 1.21</h3>
                <p>
                    In line with the FxCop 1.21 guidelines:
                    Sealed utility classes. Added serialization security demand to GetObjectData.
                    Renamed parameters.
                </p>
                <h3>EventLogAppender 32K Limit</h3>
                <p>
                    There is a limit of 32K characters in an EventLog message. Added a
                    check that only logs the first 32000 characters from the rendered
                    message.
                </p>
            </section>

            <section id="1.2.0b7" name="1.2.0 Beta 7">
                <h3>Updated to support the Microsoft .NET Framework 1.1 Final</h3>
                <p>
                    Updated to support the Microsoft .NET Framework 1.1 Final Beta (1.1.4322).
                </p>
                <h3>Features document</h3>
                <p>
                    Added a new document that covers the main features of log4net.
                    See the
                    <a href="features.html">features</a>
                    document for more information.
                </p>
                <h3>Hierarchy disabled until it is configured</h3>
                <p>
                    The Hierarchy is now disabled until it has been configured.
                    All messages logged to the Hierarchy before it has been
                    configured will be ignored without an error message being
                    written to the console.
                </p>
                <p>
                    If you are configuring log4net programmatically (i.e. not using
                    one of the built-in configurators) you must set the
                    <span class="code">ILoggerRepository.Configured</span>
                    property
                    to <span class="code">true</span> once you have configured
                    the repository.
                </p>
                <p>
                    The no appenders defined for a logger message will no longer be
                    displayed on the console by default. This message will only be
                    displayed if internal debugging is enabled.
                </p>
                <h3>New examples in VisualBasic.NET, JScript and Managed C++</h3>
                <p>
                    New examples in VisualBasic.NET, JScript and Managed C++.
                    TODO Link to document about examples.
                </p>
                <h3>Code and Documentation Updates</h3>
                <p>
                    Code fixes. Documentation and manual updates.
                    See the ChangeLog for more information.
                </p>
                <h3>Added document with example appender configurations</h3>
                <p>
                    See the
                    <a href="config-examples.html">Example Appender Configuration</a>
                    document for more information.
                </p>
            </section>

            <section id="1.2.0b6" name="1.2.0 Beta 6">
                <h3>Added support for multiple frameworks</h3>
                <p>
                    log4net 1.2.0 beta 6 adds support for the the following frameworks:
                </p>
                <div class="table">
                    <table cellspacing="0">
                        <colgroup>
                            <col style="text-align: left;"/>
                        </colgroup>
                        <tr>
                            <th>
                                Framework
                            </th>
                            <th>
                                Website
                            </th>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>Microsoft .NET Framework 1.1 Final Beta (1.1.4322)</td>
                            <td>
                                <a href="http://msdn.microsoft.com/net">http://msdn.microsoft.com/net</a>
                            </td>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>Microsoft .NET Compact Framework 1.0 (1.0.5000)</td>
                            <td>
                                <a href="http://msdn.microsoft.com/vstudio/device/compactfx.asp">
                                    http://msdn.microsoft.com/vstudio/device/compactfx.asp
                                </a>
                            </td>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>Mono 0.23</td>
                            <td>
                                <a href="http://www.go-mono.org">http://www.go-mono.org</a>
                            </td>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>Microsoft Shared Source CLI 1.0</td>
                            <td>
                                <a href="http://msdn.microsoft.com/library/en-us/dndotnet/html/mssharsourcecli.asp">
                                    http://msdn.microsoft.com/library/en-us/dndotnet/html/mssharsourcecli.asp
                                </a>
                            </td>
                        </tr>
                    </table>
                </div>
                <br/>
                <p>
                    Not all frameworks are created equal and some features have been excluded from
                    some of the builds. See the <a href="framework-support.html">Framework Support</a> document for more
                    information.
                </p>
                <h3>New build system using NAnt</h3>
                <p>
                    The new build system allows log4net to be built for all supported frameworks and
                    in all build configurations in one go.
                </p>
                <h3>New source code &amp; distribution layout</h3>
                <p>
                    The source code &amp; distribution layout has been updated to support the new
                    build environment and multiple target frameworks.
                </p>
                <h3>Removed DomainAttribute.UseDefaultDomain property</h3>
                <p>
                    Updated default behavior of <span class="code">DefaultRepositorySelector</span>. Assemblies
                    are now by default placed into the default domain. To specify another domain,
                    the <span class="code">DomainAttribute</span> must be used. This is the opposite behavior
                    to what was previously available. If you were previously specifying the
                    <span class="code">DomainAttribute.UseDefaultDomain</span>
                    property then you should remove it, and if the default behavior is now
                    sufficient, you do not need to specify the <span class="code">DomainAttribute</span> at all.
                </p>
                <h3>Updated configuration file parser</h3>
                <p>
                    Updated config file parser to use the element name as the property to set. Also
                    removed <span class="code">&lt;object&gt;</span> tag, the type attribute can now be
                    specified on the property element directly.
                </p>
                <p>
                    For example:
                </p>
                <div class="syntax">
                    <pre class="code">
                        &lt;appender&gt;
                        &lt;param name=&quot;Evaluator&quot;&gt;
                        &lt;object type=&quot;log4net.spi.LevelEvaluator&quot;&gt;
                        &lt;constructor&gt;
                        &lt;param type=&quot;log4net.spi.Level&quot; value=&quot;DEBUG&quot;/&gt;
                        &lt;/constructor&gt;
                        &lt;/object&gt;
                        &lt;/param&gt;
                        &lt;/appender&gt;
                    </pre>
                </div>
                <p>
                    becomes:
                </p>
                <div class="syntax">
                    <pre class="code">
                        &lt;appender&gt;
                        &lt;evaluator type=&quot;log4net.spi.LevelEvaluator&quot;&gt;
                        &lt;threshold value=&quot;DEBUG&quot;/&gt;
                        &lt;/evaluator&gt;
                        &lt;/appender&gt;
                    </pre>
                </div>
                <h3>Support for event ID</h3>
                <p>
                    The <span class="code">EventLogAppender</span> now supports setting the event ID in the
                    event log, this is taken from the <span class="code">EventID</span> property from the per
                    event <span class="code">Properties</span> map on the <span class="code">LoggingEvent</span>.
                </p>
                <h3>Updated ADONetAppender</h3>
                <p/>
                <ul>
                    <li>
                        Added support for prepared statements and stored procedures
                    </li>
                    <li>
                        Added <span class="code">RawTimeStampLayout</span>to correctly convert the timestamps into
                        database date time format
                    </li>
                    <li>
                        Added <span class="code">ExceptionLayout</span> to render the exception data
                    </li>
                </ul>
                <p/>
                <h3>Support for front-end extension</h3>
                <p>
                    This allows the logging API to be wrapped or adapted for specific purposes. Two
                    extension samples are included in the distribution:
                </p>
                <div class="table">
                    <table cellspacing="0">
                        <colgroup>
                            <col style="width: 50%; text-align: left;"/>
                            <col style="width: 50%; text-align: left;"/>
                        </colgroup>
                        <tr>
                            <th>
                                Extension
                            </th>
                            <th>
                                Description
                            </th>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>log4net.Ext.Trace</td>
                            <td>Adds trace logging methods</td>
                        </tr>
                        <tr style="vertical-align: top;">
                            <td>log4net.Ext.EventID</td>
                            <td>Adds additional eventId parameter to all methods</td>
                        </tr>
                    </table>
                </div>
                <p/>
                <h3>Added ForwardingAppender</h3>
                <p>Forwards events to multiple sub appenders after applying filter rules.</p>
                <h3>Added BufferingForwardingAppender</h3>
                <p>Forward events to sub appenders after buffering them.</p>
                <h3>Added ASPNetTraceAppender</h3>
                <p>Logs events to the ASP.NET trace system.</p>
                <h3>Added NetSendAppender</h3>
                <p>Delivers logging events using the Windows Messenger service.</p>
                <h3>Added UdpAppender</h3>
                <p>Sends logging events as connectionless UDP datagrams to a remote host or a
                    multicast group.
                </p>
                <h3>Removed obsolete methods</h3>
                <h3>Lots of updates to improve our compliance with FxCop</h3>
                <h3>Improved SDK documentation</h3>
            </section>

            <section id="1.2.0b5" name="1.2.0 Beta 5">
                <h3>Fixed Exception thrown when DOM Configurator called with a null XML
                    Element.
                </h3>
                <p>This occurred if the configuration file did not have a log4net section defined.</p>
                <h3>Made level lookup case insensitive</h3>
                <h3>Prevented the Hierarchy's Threshold level from being set to a null reference</h3>
            </section>

            <section id="1.2.0b4" name="1.2.0 Beta 4">
                <h3>Added event specific properties to the logging event object</h3>
                <p>
                    Appenders can add additional information to the events they are logging. The
                    <span class="code">RemotingAppender</span>
                    and the <span class="code">SMTPAppender</span> both add a 'hostname' property to the events.
                    These properties can be accessed using the <span class="code">PatternLayout</span> with the
                    %P{name} syntax.
                </p>
                <h3>Added a plugin framework</h3>
                <p>An <span class="code">IPlugin</span> interface can be attached to any repository.
                </p>
                <h3>A new RemoteLoggingServerPlugin plugin acts as the server for the
                    RemotingAppender
                </h3>
                <h3>Updated the core log4net framework to work in an environment with no
                    permissions
                </h3>
                <p>Specific appenders still require additional permissions to log correctly</p>
                <h3>Added support for domain aliasing using the AliasDomainAttribute</h3>
                <p>This allows a parent assembly to take control of the logging domain for child
                    assemblies.
                </p>
                <h3>Added events for repository creation, configuration change, configuration reset
                    and repository shutdown
                </h3>
                <h3>Added LevelMap to the ILoggerRepository interface</h3>
                <p>The mapping from level name to level object is now repository specific,
                    therefore each repository can have independent mappings.
                </p>
                <h3>Moved hierarchy specific config file parser to new DOMHierarchyConfigurator class</h3>
                <p>This is controlled by the <span class="code">Hierarchy</span> object and allows for better
                    encapsulation.
                </p>
                <h3>Added OnlyFixPartialEventData property to the buffered appenders</h3>
                <p>This setting causes slow settings to be ignored. This significantly improves the
                    performance of the buffered appenders.
                </p>
                <h3>XML entity references are supported in the XML config file.</h3>
                <h3>Added support for expanding environment variables in &lt;param&gt; values</h3>
                <p>
                    The environment variables must be specified as <span class="code">${FOO}</span> where
                    <span class="code">FOO</span>
                    is the name of the variable to expand.
                </p>
                <h3>Upgraded to use NUnit 2.0</h3>
                <h3>File appenders can specify the encoding to use for the file</h3>
                <h3>Added strong named configuration</h3>
            </section>

            <section id="1.2.0b3" name="1.2.0 Beta 3">
                <h3>Added log4net.Ext.Trace extension</h3>
                <p>This is a separate assembly that adds a trace level to log4net.</p>
                <h3>The default log file output directory is now the application base directory not
                    the current directory
                </h3>
                <h3>Added MemoryAppender</h3>
                <p>Stores all the logging events in an in-memory buffer.</p>
                <h3>Moved the Hierarchy implementation into a separate namespace</h3>
                <p>
                    The <span class="code">log4net.Repository.Hierarchy</span> namespace now contains all the
                    code that is specific to the <span class="code">Hierarchy</span> implementation.
                </p>
                <h3>Refactored the DOMConfigurator and BasicConfigurator</h3>
                <p>
                    The <span class="code">Hierarchy</span> specific data schema and implementation could be has
                    now been moved to the <span class="code">log4net.Repository.Hierarchy</span> namespace. The
                    bootstrap code for these configurators remains in the
                    <span class="code">log4net.Config</span>
                    namespace.
                </p>
                <h3>Replaced the DOMConfiguratorAttribute UseExecutableDomain
                    property with UseDefaultDomain
                </h3>
                <p>
                    This change to the implementation of the <span class="code">DOMConfiguratorAttribute</span> should
                    allow the configuration of multiple assemblies to be accomplished more easily,
                    especially when developing web applications (ASP.NET).
                </p>
                <h3>A few good bug fixes!</h3>
            </section>

            <section id="1.2.0b2" name="1.2.0 Beta 2">
                <h3>Added ADONetAppender</h3>
                <p>Thanks to TechnologyOneCorp.com.</p>
                <h3>Added TraceLogAssembly extensibility example</h3>
                <h3>Lots of bug fixes</h3>
            </section>

            <section id="1.2.0b1" name="1.2.0 Beta 1">
                <h3>Added 6 new examples</h3>
                <h3>Split Category class into Logger and LogManager classes</h3>
                <p>
                    The instance methods from <span class="code">Category</span> have moved to the
                    <span class="code">Logger</span>
                    class. The static methods from <span class="code">Category</span> have moved to the
                    <span class="code">LogManager</span>
                    class. The <span class="code">Category</span> class still exists but for backward
                    compatibility only. Changed interface <span class="code">ICategoryFactory</span> to
                    <span class="code">ILoggerFactory</span>
                    and the implementation class <span class="code">DefaultCategoryFactory</span> to <span class="code">
                    DefaultLoggerFactory</span>.
                </p>
                <h3>Replaced Priority class with Level class</h3>
                <p>
                    The <span class="code">Priority</span> class has been replaced by the <span class="code">Level
                </span> class.
                    The <span class="code">Priority</span> class still exists for backward compatibility only.
                    The <span class="code">Level</span> class implements a static pool of <span class="code">Level
                </span> objects.
                    The <span class="code">Level</span> class is sealed and serializable.
                </p>
                <h3>Added ILoggerRepository interface implemented by Hierarchy</h3>
                <p>
                    The <span class="code">Hierarchy</span> class implements the <span class="code">ILoggerRepository
                </span> interface.
                    This interface is used by the <span class="code">LogManager</span> class and therefore
                    allows different implementations of <span class="code">ILoggerRepository</span> to be used.
                </p>
                <h3>Enhanced NUnit tests</h3>
                <p>
                    All the NUnit tests can be run using a single TestSuite: NUnitGUI
                    log4net.LogManager+AllTests,log4net.dll.
                </p>
                <h3>Added support for serializing LoggingEvents</h3>
                <p>
                    The <span class="code">LoggingEvent</span> class is serializable. All local state is
                    captured before serialization occurs. This now allows
                    <span class="code">LoggingEvent</span>
                    objects to be serialized between applications or machines.
                </p>
                <h3>Added RemotingAppender</h3>
                <p>
                    Delivers <span class="code">LoggingEvents</span> to a remote interface. This can be used to
                    collect distributed logging into a single log file. There is an example
                    remoting sink that receives the logging events, see
                    <span class="code">examples\net\remoting\RemotingServer</span>
                    for details.
                </p>
                <h3>Added support for rendering composite objects</h3>
                <p>
                    The <span class="code">IObjectRenderer</span> interface method <span class="code">DoRender</span> now
                    takes a <span class="code">RendererMap</span> argument. This allows the renderer to use the
                    appropriate renderer from the <span class="code">RendererMap</span> to render any nested
                    objects.
                </p>
                <h3>Added support for rendering exceptions</h3>
                <p>
                    The <span class="code">DefaultRenderer</span> now has support for rendering exceptions to a
                    string. This includes nested exceptions. The <span class="code">RendererMap</span> is now
                    used to render exceptions in the <span class="code">LoggingEvent</span>. This allows the
                    rendering of specific exceptions to be enhanced by specific renderers.
                </p>
                <h3>Added ITriggeringEventEvaluator interface</h3>
                <p>
                    This interface is used by <span class="code">SMTPAppender</span> and
                    <span class="code">RemotingAppender</span>
                    to determine if a <span class="code">LoggingEvent</span> meets a set of user defined
                    criteria. These appenders use the interface to determine whether or not to
                    deliver the current buffer of events to their listener. The interface is
                    implemented by the <span class="code">LevelEvaluator</span> class, which triggers above a
                    set level.
                </p>
                <h3>Added regex matching to the MDCFilter, NDCFilter and StringMatchFilter</h3>
                <p>
                    The <span class="code">MDCFilter</span>, <span class="code">NDCFilter</span> and
                    <span class="code">StringMatchFilter</span>
                    can now be configured to use regex matches in addition to substring matches.
                    Set the <span class="code">RegexToMatch</span> property to use this feature.
                </p>
                <h3>Added XMLLayout</h3>
                <p>
                    emits an XML element for each <span class="code">LoggingEvent</span>. This allows logging
                    events to be stored and manipulated as XML. The DTD for the XML emitted is in
                    the
                    <span class="code">log4net-events.dtd</span>
                </p>
                <h3>Added support for &lt;logger&gt; and &lt;level&gt; elements in the
                    DOMConfigurator
                </h3>
                <p>
                    As the <span class="code">Category</span> and <span class="code">Priority</span> classes have been
                    replaced by the <span class="code">Logger</span> and <span class="code">Level</span> classes. The
                    <span class="code">DOMConfigurator</span>
                    has been updated to allow the <span class="code">&lt;logger&gt;</span> and
                    <span class="code">&lt;level&gt;</span>
                    elements to be used in place of the <span class="code">&lt;category&gt;</span> and
                    <span class="code">&lt;priority&gt;</span>
                    elements. The old elements are still accepted for backward compatibility.
                </p>
                <h3>Added Threshold property to Hierarchy</h3>
                <p>
                    Changed <span class="code">DisableXXX()</span> methods on <span class="code">Hierarchy</span> to a
                    <span class="code">Threshold</span>
                    property.
                </p>
                <h3>Added support for logging domains</h3>
                <p>
                    The <span class="code">LogManager</span> supports multiple logging domains. The
                    <span class="code">LogManager</span>
                    uses an instance of the <span class="code">IRepositorySelector</span> class to map from
                    domains to <span class="code">ILoggerRepository</span> instances. The default implementation
                    is to have a separate <span class="code">ILoggerRepository</span> for each domain. When a
                    call is made to the static methods on <span class="code">LogManager</span> the domain can be
                    specified (as a string) or the domain can be inferred automatically from the
                    calling assembly. The default behavior is for each assembly loaded into the
                    process to have its own domain and <span class="code">ILoggerRepository</span>. These can
                    each be configured separately. This allows standalone assemblies to use log4net
                    without conflicting with other modules in the process. The domain for the
                    assembly is configured using metadata attributes defined on the assembly.
                </p>
                <h3>DOMConfigurator can set params to arbitrary objects</h3>
                <p>
                    Using a new <span class="code">&lt;object&gt;</span> element, params can now be set to any
                    creatable object.
                </p>
            </section>

        </section>
    </body>
</document>
