blob: fac995aeec1c32451a66e5d3565073df3a02172d [file] [log] [blame]
<?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.11" name="2.0.11">
Apachhe log4net 2.0.11 fixes incorrect version strings within the released
binaries and contains some minor fixes to correctly dispose of StreamWriters
used during log flushing, thanks to community member @NicholasNoise
</section>
<section id="2.0.10" name="2.0.10">
<p>
Apache log4net 2.0.10 improves <code>netstandard2.0</code> support
thanks to community member @NicholasNoise.
</p>
<section id="2.0.10-bug" name="Bug Fixes">
<ul>
<li>
[<a href="https://issues.apache.org/jira/browse/LOG4NET-575">LOG4NET-575</a>]
Addresses CVE-2018-1285 by cherry-picking the fix from
Dominik Psenner, reported by Karthik Balasundaram, as it already
existed in the the develop branch
</li>
</ul>
</section>
</section>
<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>