NLog 5.0 Finally Ready!

16 May 2022

NLog 5.0 has completed preview testing, and is ready for release.

Major Features

  • NLog is now faster and lighter
  • ScopeContext to replace MDC + MDLC + NDC + NDLC
  • NLog Layout stored as NLog Configuration Variables (Ex. JsonLayout)
  • NLog Layout for everything
  • Fluent API for NLog LoggingConfiguration
  • NLog Callsite from caller member attributes
  • LogFactory with Dependency Injection
  • Updated default values for better out-of-the-box experience
  • Multiple type-aliases can be defined for targets, layouts, layout renderers and conditions
  • Parsing of type-alias will now ignore dashes (-)

See details here

Breaking Changes

See rationale here

  • Strong Version Changed
  • Obsolete methods have been removed
  • LoggingRule Filters DefaultAction changed to FilterResult.Ignore, that can cause NO output.
  • NLog.Extensions.Logging without any filter, that can give LOTS of unexpected output.
  • NLog.Extensions.Logging changes capture of EventId, so missing EventId_Id-property.
  • NLog.Extensions.Logging makes NLog-section reserved in appsettings.json
  • NLog Extensions assemblies will not be loaded automatically, so extensions must be explicitly added.
  • NLog DatabaseTarget extracted into its own NLog.Database nuget-package
  • NLog OutputDebugStringTarget extracted into its own NLog.OutputDebugString nuget-package
  • NLog PerformanceCounterTarget extracted into its own NLog.PerformanceCounter nuget-package
  • NLog ImpersonatingTargetWrapper extracted into its own NLog.WindowsIdentity nuget-package
  • NLog LogReceiverWebServiceTarget extracted into its own NLog.Wcf nuget-package
  • NLog PerformanceCounterLayoutRenderer extracted into its own NLog.PerformanceCounter nuget-package
  • NLog RegistryLayoutRenderer extracted into its own NLog.WindowsRegistry nuget-package
  • NLog WindowsIdentityLayoutRenderer extracted into its own NLog.WindowsIdentity nuget-package
  • Deprecated NLog.Extended nuget-package
  • Deprecated NLog.Config nuget-package
  • Xamarin, Windows Phone and Silverlight platforms replaced by .NET Standard
  • .NET Framework v4.0 platform replaced by .NET Framework v3.5 platform
  • Automatic loading of NLog.config now first check for exe.nlog
  • NLog Configuration will have KeepVariablesOnReload enabled by default
  • Layout and LayoutRenderer are now threadsafe by default
  • Default Layout for NLog Targets has been updated
  • Default Format for NLog Exception layoutrenderer has been updated
  • NLog InternalLogger will not initialize itself from app.config or environment variables
  • Removed obsolete methods and properties
  • ScopeContext changes MappedDiagnosticContext (MDC) to use AsyncLocal
  • MappedDiagnosticContext (MDC), MappedDiagnosticLogicalContext (MDLC), GlobalDiagnosticContext (GDC) now case-insensitive
  • FileTarget KeepFileOpen = true by default
  • FileTarget ConcurrentWrites = false by default
  • FileTarget Encoding default value changed to UTF8
  • FileTarget will include BOM by default for UTF16 and UTF32 encoding
  • NetworkTarget will Discard by default on overflow
  • JsonLayout MaxRecursionLimit default value changed to 1
  • JsonLayout EscapeForwardSlash default value changed to false
  • JsonLayout always includes decimal point for floating-point types
  • CallSite-renderer will automatically clean async callstacks
  • The Simplelayout.ToString() has been changed

For full list of all changes: NLog 5.0 Pull Requests


Additional thanks to contributers:

  • @TalAloni
  • @njqdev
  • @menishmueli
  • @ErickJeffries
  • @AlanLiu90
  • @aled
  • @tetrodoxin
  • @noamyogev84
  • @simoneserra93
  • @sjafarianm
  • @Orace
  • @GitHubPang
  • @KurnakovMaksim
  • @mickelsonmichael
  • @ThomasArdal