Summary of changes since version 1.2.0 Beta 7
-
Changed assembly name to log4net
The build output is now log4net.dll for all frameworks. This is a breaking change.
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 log4net. 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.
-
Combined Release and ReleaseStrong builds
The Release and ReleaseStrong builds have been consolidated into a single build called Release. This Release build is strongly named.
-
New Appender: ColoredConsoleAppender
The ColoredConsoleAppender writes events to the application's console. It can be configured to specify the text and background colors for different level events.
-
New Appender: SmtpPickupDirAppender
The SmtpPickupDirAppender 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.
-
New Layout: XmlLayoutSchemaLog4j
This new layout formats the logging events as XML which complies with the log4j 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 UdpAppender.
-
New PatternLayout conversion characters
Added support for capturing the current thread principal name and the app domain friendly name for each logging event.
- %a
- Used to output the friendly name of the AppDomain where the logging event was generated.
- %u
- Used to output the user name for the currently active user (Principal.Identity.Name).
-
Types specified in the config file are now loaded ignoring case
All types specified in the configuration files are now loaded using a case insensitive method.
-
Fine grained fixing for buffered events
The LoggingEvent 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 Fix property takes a combination of the FixFlags enumeration values.
-
Code updated inline with FxCop 1.21
In line with the FxCop 1.21 guidelines: Sealed utility classes. Added serialization security demand to GetObjectData. Renamed parameters.
-
EventLogAppender 32K Limit
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.
Summary of changes since version 1.2.0 Beta 6
-
Updated to support the Microsoft .NET Framework 1.1 Final
Updated to support the Microsoft .Net Framework 1.1 Final Beta (1.1.4322).
-
Features document
Added a new document that covers the main features of log4net. See the features document for more information.
-
Hierarchy disabled until it is configured
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.
If you are configuring log4net programmatically (i.e. not using one of the built-in configurators) you must set the ILoggerRepository.Configured property to true once you have configured the repository.
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.
-
New examples in VisualBasic.NET, JScript and Managed C++
New examples in VisualBasic.NET, JScript and Managed C++. TODO Link to document about examples.
-
Code and Documentation Updates
Code fixes. Documentation and manual updates. See the ChangeLog for more information.
-
Added document with example appender configurations
See the Example Appender Configuration document for more information.
Summary of changes since version 1.2.0 Beta 5
-
Added support for multiple frameworks
log4net 1.2.0 beta 6 adds support for the the following frameworks:
Framework Website Microsoft .Net Framework 1.1 Final Beta (1.1.4322) http://msdn.microsoft.com/net Microsoft .Net Compact Framework 1.0 (1.0.5000) http://msdn.microsoft.com/vstudio/device/compactfx.asp Mono 0.23 http://www.go-mono.org Microsoft Shared Source CLI 1.0 http://msdn.microsoft.com/library/en-us/dndotnet/html/mssharsourcecli.asp
Not all frameworks are created equal and some features have been excluded from some of the builds. See the Framework Support document for more information.
-
New build system using NAnt
The new build system allows log4net to be built for all supported frameworks and in all build configurations in one go.
-
New source code & distribution layout
The source code & distribution layout has been updated to support the new build environment and multiple target frameworks.
-
Removed DomainAttribute.UseDefaultDomain property
Updated default behaviour of DefaultRepositorySelector. Assemblies are now by default placed into the default domain. To specify another domain, the DomainAttribute must be used. This is the opposite behaviour to what was previously available. If you were previously specifying the DomainAttribute.UseDefaultDomain property then you should remove it, and if the default behaviour is now sufficient, you do not need to specify the DomainAttribute at all.
-
Updated configuration file parser
Updated config file parser to use the element name as the property to set. Also removed <object> tag, the type attribute can now be specified on the property element directly.
For example:
<appender> <param name="Evaluator"> <object type="log4net.spi.LevelEvaluator"> <constructor> <param type="log4net.spi.Level" value="DEBUG"/> </constructor> </object> </param> </appender>
becomes:
<appender> <evaluator type="log4net.spi.LevelEvaluator"> <threshold value="DEBUG"/> </evaluator> </appender>
-
Support for event ID
The EventLogAppender now supports setting the event ID in the event log, this is taken from the EventID property from the per event Properties map on the LoggingEvent.
-
Updated ADONetAppender
- Added support for prepared statements and stored procedures
- Added RawTimeStampLayoutto correctly convert the timestamps into database date time format
- Added ExceptionLayout to render the exception data
-
Support for front-end extension
This allows the logging API to be wrapped or adapted for specific purposes. Two extension samples are included in the distribution:
Extension Description log4net.Ext.Trace Adds trace logging methods log4net.Ext.EventID Adds additional eventId parameter to all methods -
Added ForwardingAppender
Forwards events to multiple sub appenders after applying filter rules.
-
Added BufferingForwardingAppender
Forward events to sub appenders after buffering them.
-
Added ASPNetTraceAppender
Logs events to the ASP.NET trace system.
-
Added NetSendAppender
Delivers logging events using the Windows Messenger service.
-
Added UdpAppender
Sends logging events as connectionless UDP datagrams to a remote host or a multicast group.
-
Removed obsolete methods
-
Lots of updates to improve our compliance with FxCop
-
Improved SDK documentation
Summary of changes since version 1.2.0 Beta 4
-
Fixed Exception thrown when DOM Configurator called with a null XML Element.
This occurred if the configuration file did not have a log4net section defined.
-
Made level lookup case insensitive
-
Prevented the Hierarchy's Threshold level from being set to a null reference
Summary of changes since version 1.2.0 Beta 3
-
Added event specific properties to the logging event object
Appenders can add additional information to the events they are logging. The RemotingAppender and the SMTPAppender both add a 'hostname' property to the events. These properties can be accessed using the PatternLayout with the %P{name} syntax.
-
Added a plugin framework
An IPlugin interface can be attached to any repository.
-
A new RemoteLoggingServerPlugin plugin acts as the server for the RemotingAppender
-
Updated the core log4net framework to work in an environment with no permissions
Specific appenders still require additional permissions to log correctly
-
Added support for domain aliasing using the AliasDomainAttribute
This allows a parent assembly to take control of the logging domain for child assemblies.
-
Added events for repository creation, configuration change, configuration reset and repository shutdown
-
Added LevelMap to the ILoggerRepository interface
The mapping from level name to level object is now repository specific, therefore each repository can have independent mappings.
-
Moved hierarchy specific config file parser to new DOMHierarchyConfigurator class
This is controlled by the Hierarchy object and allows for better encapsulation.
-
Added OnlyFixPartialEventData property to the buffered appenders
This setting causes slow settings to be ignored. This significantly improves the performance of the buffered appenders.
-
XML entity references are supported in the XML config file.
-
Added support for expanding environment variables in <param> values
The environment variables must be specified as ${FOO} where FOO is the name of the variable to expand.
-
Upgraded to use NUnit 2.0
-
File appenders can specify the encoding to use for the file
-
Added strong named configuration
Summary of changes since version 1.2.0 Beta 2
-
Added log4net.Ext.Trace extension
This is a separate assembly that adds a trace level to log4net.
-
The default log file output directory is now the application base directory not the current directory
-
Added MemoryAppender
Stores all the logging events in an in-memory buffer.
-
Moved the Hierarchy implementation into a separate namespace
The log4net.Repository.Hierarchy namespace now contains all the code that is specific to the Hierarchy implementation.
-
Refactored the DOMConfigurator and BasicConfigurator
The Hierarchy specific data schema and implementation could be has now been moved to the log4net.Repository.Hierarchy namespace. The bootstrap code for these configurators remains in the log4net.Config namespace.
-
Replaced the DOMConfiguratorAttribute UseExecutableDomain property with UseDefaultDomain
This change to the implementation of the DOMConfiguratorAttribute should allow the configuration of multiple assemblies to be accomplished more easily, especially when developing web applications (ASP.NET).
-
A few good bug fixes!
Summary of changes since version 1.2.0 Beta 1
-
Added ADONetAppender
Thanks to TechnologyOneCorp.com.
-
Added TraceLogAssembly extensibility example
-
Lots of bug fixes
Summary of changes since version 1.1.1
-
Added 6 new examples
-
Split Category class into Logger and LogManager classes
The instance methods from Category have moved to the Logger class. The static methods from Category have moved to the LogManager class. The Category class still exists but for backward compatibility only. Changed interface ICategoryFactory to ILoggerFactory and the implementation class DefaultCategoryFactory to DefaultLoggerFactory.
-
Replaced Priority class with Level class
The Priority class has been replaced by the Level class. The Priority class still exists for backward compatibility only. The Level class implements a static pool of Level objects. The Level class is sealed and serialisable.
-
Added ILoggerRepository interface implemented by Hierarchy
The Hierarchy class implements the ILoggerRepository interface. This interface is used by the LogManager class and therefore allows different implementations of ILoggerRepository to be used.
-
Enhanced NUnit tests
All the NUnit tests can be run using a single TestSuite: NUnitGUI log4net.LogManager+AllTests,log4net.dll.
-
Added support for serialising LoggingEvents
The LoggingEvent class is serialisable. All local state is captured before serialisation occurs. This now allows LoggingEvent objects to be serialised between applications or machines.
-
Added RemotingAppender
Delivers LoggingEvents 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 examples\net\remoting\RemotingServer for details.
-
Added support for rendering composite objects
The IObjectRenderer interface method DoRender now takes a RendererMap argument. This allows the renderer to use the appropriate renderer from the RendererMap to render any nested objects.
-
Added support for rendering exceptions
The DefaultRenderer now has support for rendering exceptions to a string. This includes nested exceptions. The RendererMap is now used to render exceptions in the LoggingEvent. This allows the rendering of specific exceptions to be enhanced by specific renderers.
-
Added ITriggeringEventEvaluator interface
This interface is used by SMTPAppender and RemotingAppender to determine if a LoggingEvent 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 LevelEvaluator class, which triggers above a set level.
-
Added regex matching to the MDCFilter, NDCFilter and StringMatchFilter
The MDCFilter, NDCFilter and StringMatchFilter can now be configured to use regex matches in addition to substring matches. Set the RegexToMatch property to use this feature.
-
Added XMLLayout
emits an XML element for each LoggingEvent. This allows logging events to be stored and manipulated as XML. The DTD for the XML emitted is in the log4net-events.dtd
-
Added support for <logger> and <level> elements in the DOMConfigurator
As the Category and Priority classes have been replaced by the Logger and Level classes. The DOMConfigurator has been updated to allow the <logger> and <level> elements to be used in place of the <category> and <priority> elements. The old elements are still accepted for backward compatibility.
-
Added Threshold property to Hierarchy
Changed DisableXXX() methods on Hierarchy to a Threshold property.
-
Added support for logging domains
The LogManager supports multiple logging domains. The LogManager uses an instance of the IRepositorySelector class to map from domains to ILoggerRepository instances. The default implementation is to have a separate ILoggerRepository for each domain. When a call is made to the static methods on LogManager the domain can be specified (as a string) or the domain can be inferred automatically from the calling assembly. The default behaviour is for each assembly loaded into the process to have its own domain and ILoggerRepository. 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.
-
DOMConfigurator can set params to arbitrary objects
Using a new <object> element, params can now be set to any creatable object.