## Apache log4net™ Supported Frameworks ## Summary of .NET frameworks supported by log4net log4net is built on a number of different frameworks. Each new version of the frameworks add new features. To take advantage of these new features we must build log4net using the appropriate framework. We also maintain builds compatible with older versions of the frameworks. It is important to remember that the .NET frameworks support backward compatibility, that is a new version of the framework will run binary assemblies that were targeted to previous versions of the framework. While the number of different builds available may seem confusing, you only need to select the nearest build for your platform that is equal to or earlier than your chosen deployment framework. If you intend to deploy your application on the Microsoft® .NET Framework 1.0 don't pick the log4net build that is built against the Microsoft .NET Framework 1.1 because the .NET framework does not guarantee forward compatibility only backward compatibility. log4net is regularly built by its developers on the following frameworks:
Framework | Website
--- | ---
.NET Core 1.0 providing .NET Standard 1.3 | https://dotnet.github.io/
Microsoft .NET Framework 2.0 | http://msdn.microsoft.com/en-us/netframework/
Microsoft .NET Framework 3.5 | http://msdn.microsoft.com/en-us/netframework/
Microsoft .NET Framework 4.0 | http://msdn.microsoft.com/en-us/netframework/
Microsoft .NET Framework 3.5 Client Profile | http://msdn.microsoft.com/en-us/library/cc656912.aspx
Microsoft .NET Framework 4.0 Client Profile | http://msdn.microsoft.com/en-us/library/cc656912.aspx
Microsoft .NET Framework 4.5 | http://msdn.microsoft.com/en-us/netframework/
Mono 2.0 | http://www.mono-project.com
Mono 3.5 | http://www.mono-project.com
Mono 4.0 | http://www.mono-project.com
log4net should also build on the following frameworks but binaries are not created by the developers and source compatibility can not be guaranteed:
Framework | Website
--- | ---
Microsoft .NET Framework 1.0 | http://msdn.microsoft.com/en-us/netframework/
Microsoft .NET Framework 1.1 | http://msdn.microsoft.com/en-us/netframework/
Microsoft .NET Compact Framework 1.0 | http://msdn2.microsoft.com/en-us/netframework/aa497273.aspx
Microsoft .NET Compact Framework 2.0 | http://msdn2.microsoft.com/en-us/netframework/aa497273.aspx
Mono 1.0 | http://www.mono-project.com
Microsoft Shared Source CLI 1.0 | http://msdn.microsoft.com/en-us/library/ms973879.aspx
CLI 1.0 Compatible | http://msdn.microsoft.com/en-us/netframework/aa569283.aspx
For most of these frameworks a log4net assembly targeting the framework is supplied. Although it's perfectly possible to use the .NET Framework 3.5 version of log4net on the .NET Framework 4.0, having an assembly that really targets a specific framework allows us to use features in that framework that are not available in other frameworks or remove features from log4net that are not supported in a specific framework. There are no assemblies targeting the Compact Framework 1.0/2.0, .NET Framework or Mono 1.x or Microsoft Shared Source CLI 1.0 in the binary release, but they can be built from the source release. ## Appenders The appenders available to each framework depend on the functionality of the framework and the platform it runs on:
Appender | .NET Framework 1.0 | .NET Framework 1.1 | .NET Framework 2.0 | .NET Framework 3.5 | .NET Framework 4.0 | .NET Framework 4.5 | .NET Framework 3.5 Client Profile | .NET Framework 4.0 Client Profile | .NET Standard 1.3 | .NET CF 1.0 | .NET CF 2.0 | Mono | Shared Source CLI 1.0 | CLI 1.0 Compatible
--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | ---
AdoNetAppender | x | x | x | x | x | x | x | x |  | x | x | x |  | x
AnsiColorTerminalAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
AspNetTraceAppender | x | x | x | x | x | x |  |  |  |  |  | x |  | x
BufferingForwardingAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
ColoredConsoleAppender | x | x | x | x | x | x | x | x |  |  |  |  |  |
ConsoleAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
DebugAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
EventLogAppender | x | x | x | x | x | x | x | x |  |  |  | x |  | x
FileAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
ForwardingAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
LocalSyslogAppender | x | x | x | x | x | x | x | x | x |  |  | x |  | x
ManagedColoredConsoleAppender |  |  | x | x | x | x | x | x | x |  |  | x |  |
MemoryAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
NetSendAppender | x | x | x | x | x | x | x | x |  |  |  |  |  |
OutputDebugStringAppender | x | x | x | x | x | x | x | x | x | x | x |  |  |
RemoteSyslogAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
RemotingAppender | x | x | x | x | x | x | x | x |  |  |  | x | x | x
RollingFileAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
SmtpAppender | x | x | x | x | x | x | x | x |  |  |  | x |  | x
SmtpPickupDirAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
TelnetAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
TraceAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
UdpAppender | x | x | x | x | x | x | x | x | x | x | x | x | x | x
## Framework Specific Notes ## .NET Core 1.0 / .NET Standard 1.3 Targets netstandard-1.3 and thus doesn't support a few things that work on Mono or the classical .NET platform. Things that are not supported in log4net for .NET Standard 1.3: the ADO.NET appender anything related to ASP.NET (trace appender and several pattern converters) .NET Remoting the colored console appender the event log appender The `NetSendAppender` The SMTP appender `DOMConfigurator` stack trace patterns access to `appSettings` (neither the log4net section itself nor using the `AppSettingsPatternConverter`) Access to "special paths" using the `EnvironmentFolderPathPatternConverter` Impersonation of Windows accounts `log4net.LogicalThreadContext` and the associated properties and stack classes use `AsyncLocal` rather than `CallContext`. Prior to log4net 2.0.8 they haven't been supported for .NET Standard at all. ## Microsoft .NET Framework 1.0 none ## Microsoft .NET Framework 1.1 none ## Microsoft .NET Framework 2.0 none ## Microsoft .NET Framework 3.5 none ## Microsoft .NET Framework 4.0 none ## Microsoft .NET Framework 4.5 none ## Microsoft .NET Framework 3.5 Client Profile As of log4net 1.2.11 this version is identical to the .NET 3.5 version without support for ASP.NET specific appenders and patterns. ## Microsoft .NET Framework 4.0 Client Profile As of log4net 1.2.11 this version is identical to the .NET 4.0 version without support for ASP.NET specific appenders and patterns. ## Microsoft .NET Compact Framework 1.0 #### Assembly attributes The .NET Compact Framework 1.0 does not support retrieving assembly level attributes, therefore all log4net configuration attributes were removed from the .NET Compact Framework 1.0 version of log4net. For Smart-device applications, the log4net system can be configured by passing the location of the log4net configuration file to the log4net.Config.XmlConfigurator.Configure(FileInfo) method in the entry point of the application. For example:
    namespace TestApp
    {
        using System.IO;

        public class EntryPoint
        {
            /// <summary>
            /// Application entry point.
            /// </summary>
            public static void Main()
            {
                // Uncomment the next line to enable log4net internal debugging
                // log4net.Util.LogLog.InternalDebugging = true;

                // This will instruct log4net to look for a configuration file
                // called config.log4net in the root directory of the device
                log4net.Config.XmlConfigurator.Configure(new FileInfo(@"\config.log4net"));

                ...

                // This will shutdown the log4net system
                log4net.LogManager.Shutdown();
            }
        }
    }
#### Notification events The .NET Compact Framework 1.0 does not support notification events during the application shutdown, therefore log4net cannot automatically hook the application shutdown notification. Applications will need to programmatically shutdown the log4net system during the application's shutdown using the log4net.LogManager.Shutdown() method in order to prevent losing logging events. See the code above for an example. #### FileSystemWatcher The .NET Compact Framework 1.0 does not support the System.IO.FileSystemWatcher class. As a result, the XmlConfiguratorAttribute.Watch property and the XmlConfigurator.ConfigureAndWatch methods are not available. Watching changes to the log4net configuration file is not supported on the .NET Compact Framework 1.0. #### UserName The .NET Compact Framework 1.0 does not support the System.Security.Principal.WindowsIdentity class. This is used to capture the current thread's user identity. Therefore the LoggingEvent.UserName property will return the value "NOT AVAILABLE". #### Identity The .NET Compact Framework 1.0 does not support the System.Security.Principal.IPrincipal interface. This is used to capture the current thread's user identity. Therefore the LoggingEvent.Identity property will return the value "NOT AVAILABLE". #### Environment variables The .NET Compact Framework 1.0 does not support retrieving environment variables, therefore it's not possible to substitute environment variables in parameter values when using the .NET Compact Framework 1.0 version of log4net. #### Serialization The .NET Compact Framework 1.0 does not support serialization, therefore none of the log4net classes in the .NET Compact Framework 1.0 version are serializable. #### LoggingEvent.Domain The .NET Compact Framework 1.0 does not support AppDomain functionality. The friendly name for the current AppDomain is stored in the LoggingEvent.Domain property and is accessed using the %a pattern of the PatternLayout. On the .NET Compact Framework 1.0 this value is generated by taking the file name for the application's primary module. ## Microsoft .NET Compact Framework 2.0 See notes for .NET Compact Framework 1.0 ## Mono There are 2 separate builds of log4net for mono; Mono 1.0, built using the C# compiler in a mode which is compatible with the CLI 1.0 language specification, and; Mono 2.0, built using the .NET 2.0 extensions to the C# language. ## Mono 1.0 none ## Mono 2.0 none ## Mono 3.5 none ## Mono 4.0 none ## Microsoft Shared Source CLI 1.0 #### FileSystemWatcher SSCLI 1.0 does not support the System.IO.FileSystemWatcher class. As a result, the XmlConfiguratorAttribute.Watch property and the XmlConfigurator.ConfigureAndWatch methods are not available. Watching changes to the log4net configuration file is not supported on SSCLI 1.0. #### UserName SSCLI 1.0 does not support the System.Security.Principal.WindowsIdentity class. This is used to capture the current thread's user identity. Therefore the LoggingEvent.UserName property will return the value "NOT AVAILABLE". #### Identity SSCLI 1.0 does not support the System.Security.Principal.IPrincipal interface. This is used to capture the current thread's user identity. Therefore the LoggingEvent.Identity property will return the value "NOT AVAILABLE". ## CLI 1.0 Compatible This build of log4net is designed to run on any ECMA CLI 1.0 compatible runtime. The assembly does not support any platform specific features. The build includes the common subset of functionality found in the .NET 1.0 and Mono 1.0 builds. The output assembly is built using the Microsoft .NET 1.0 compiler and library. The log4net CLI 1.0 assembly is runtime compatible with the following frameworks: Microsoft .NET Framework 1.0 (and higher) Mono 1.0 (and higher) Only a Release build is generated for this configuration because the assembly debugging information has not been standardized.