Serilog Versions Save

Simple .NET logging with fully-structured events

v3.1.1

6 months ago
  • #1977 - don't stack overflow when disposing ReusableStringWriter with large renderings (@nblumhardt)

This is a bugfix for release 3.1.0.

v3.1.0

6 months ago
  • #1935 - remove CHANGES.md (@sungam3r)
  • #1936, #1922 - README.md updates (@nblumhardt)
  • #1942 - remove redundant GetTypeInfo() calls (@SimonCropp)
  • #1947 - message template caching performance improvements (@epeshk)
  • #1948 - reduce allocations in Logger.Write() (@epeshk)
  • #1955 breaking - collect and propagate Activity.Current.TraceId and SpanId automatically in Logger.Write() (@nblumhardt)
  • #1964 - don't cache reusable string writers with large buffer sizes (@Jakimar)
  • #1969 - README.md updates (@bartelink)
  • #1971 - drop test coverage for unsupported .NET Core versions (@bartelink)

Built-in trace and span id support

This release adds two new first-class properties to LogEvent: TraceId and SpanId. These are set automatically in Logger.Write() to the corresponding property values from System.Diagnostics.Activity.Current.

The major benefit of this change is that sinks, once updated, can reliably propagate trace and span ids through to back-ends that support them (in much the same way that first-class timestamps, messages, levels, and exceptions are used today).

The sinks maintained under serilog/serilog, along with formatting helpers such as Serilog.Formatting.Compact and Serilog.Expressions, are already compatible with this change or have pending releases that add compatibility.

Dropped .NET Core 2.1 and 3.0 support

On .NET Core 2.1 and 3.0, projects targeting Serilog 3.1+ will fail to build, with:

/project/packages/system.runtime.compilerservices.unsafe/6.0.0/buildTransitive/netcoreapp2.0
/System.Runtime.CompilerServices.Unsafe.targets(4,5): error : System.Runtime.CompilerServices.Unsafe
doesn't support netcoreapp2.1. Consider updating your TargetFramework to netcoreapp3.1 or later.

Affected consumers should continue to use Serilog 3.0 or earlier. See https://github.com/serilog/serilog/issues/1983 for a discussion of this issue.

Technical breaking change

Trace and span id collection includes support for {TraceId} and {SpanId} placeholders in output templates (commonly used when formatting text log files). Where previously these names resolved to user-defined properties, they now resolve to the built-in LogEvent.TraceId and LogEvent.SpanId values, respectively.

Impact is expected to be low/zero, because the trace and span id values in any user-added properties are almost certainly identical to the built-in ones.

v3.0.1

10 months ago
  • #1926 - fix JsonFormatter output for renderMessage = true (@nblumhardt)

v3.0.0

10 months ago

What's new in 3.0.0?

Target framework changes - Serilog no longer targets netstandard1.x or .NET Framework versions earlier than .NET 4.6.2. Users on affected frameworks should continue to target Serilog 2.12.x.

Removed obsolete APIs - Many deprecated/obsolete types and functions have been removed. Notably, JsonFormatter can no longer be subclassed (either port to JsonValueFormatter, use Serilog.Expressions, or copy the original JsonFormatter code into your project).

Added APIs - LevelAlias.Off is now provided as an equivalent to Microsoft.Extensions.Logging's LogLevel.Off; Destructure.AsDictionary<T>() can now be used to mark dictionary types.

Fewer allocations on many hot paths - A lot of work has gone into avoiding heap allocations wherever possible.

Changes

v2.12.0

1 year ago

Highlights of 2.12.0

Improved and expanded <Nullable>enable</Nullable> support

A huge number of commits have gone into completing and refining non-null reference type annotations, which now cover the entire public Serilog API. The Serilog project itself now builds with non-null reference type checking globally enabled :tada:

IAsyncDisposable support

Sinks that need to flush changes using asynchronous APIs can now implement IAsyncDisposable and prevent the possibility of deadlocking while waiting for tasks to complete.

To drive this, Logger can now be disposed via using async:

await using var log = new LoggerConfiguration().CreateLogger();

and the Log class provides Log.CloseAndFlushAsync():

await Log.CloseAndFlushAsync();

DateOnly and TimeOnly support

The DateOnly and TimeOnly types introduced in .NET 6 are now correctly handled as scalar values when capturing.

Merged PRs

  • #1713, #1716, #1715, #1722, #1721, #1720, #1729 - improved non-null reference type annotations (@SimonCropp)
  • #1702 - DateOnly and TimeOnly support (@SimonCropp)
  • #1764, #1703, #1708, #1709, #1712, #1724, #1730, #1747 - build and dependency updates (@SimonCropp)
  • #1723, #1728, #1731, #1732, #1734, #1735, #1733, #1736, #1739, #1746, #1745, #1741, #1742 - code clean-up and modernization (@SimonCropp)
  • #1750 - IAsyncDisposable support for Logger and sinks (@nblumhardt)
  • #1699 - fix some XDOC documentation (@sungam3r)
  • #1719 - remove redundant ! operator from null in conditions (@sungam3r)
  • #1725 - introduce file-scoped namespaces (@sungam3r)
  • #1700, #1704, #1707 - more nulllable annotation updates (@nblumhardt)
  • #1711 - fix support for ValueTuple (@SimonCropp)

v2.11.0

2 years ago
  • #1503 - make some local functions static to avoid scope capture (@SimonCropp)
  • #1561 - add support for collections/string[] to key-value settings (@stochmal)
  • #1588, #1591, #1593, #1594, #1597 - nullable reference type annotations and language version updates (@SimonCropp)
  • #1595 - net5.0 target (@nblumhardt)
  • #1652 - fix capturing of anonymous types in .NET interactive (@KZedan)
  • #1641 - corrected documentation comments for MessageTemplateFormatMethod (@JinsPeter)
  • #1635 - fix destructuring of Memory<T>/ReadOnlyMemory<T> and non-reflection-compatible properties e.g. of type Span<T> (@skomis-mm)
  • #1625 - update issue template (@augustoproiete)
  • #1664 - update ILogger documentation (@erichiller)

v$(appveyor_build_version)

3 years ago

v2.10.0

3 years ago
  • #1370, #1374 - improve test coverage (@rafaelsc)
  • #1371, #1377, #1429, #1445 - documentation updates (@perjahn, @morgankenyon, @rafaelsc, @JakenVeina)
  • #1378, #1392 - build fixes (@nblumhardt)
  • #1477 - don't fail to log when ToString() throws an exception (@rafaelsc)
  • #1435 - netstandard2.1 support and default implementations for ILogger methods (@skomis-mm)
  • #1442 - MinimumLevel.Override() runtime optimizations (@skomis-mm)
  • #1463 - fix disposal of wrapped sinks through LoggerSinkConfiguration.Wrap()
  • #1449 - allow exceptions to bubble up through wrapped aggregate sinks (@augustoproiete)
  • #1466 - internal wrapper sink refactoring (@nblumhardt)
  • #1427, #1452, #1467 - when ToString() on a logged object returns null, serialize as "" (@rafaelsc, @nblumhardt)
  • #1472 - improve handling of minimum level overrides in sub-loggers (@skomis-mm)

v2.9.0

4 years ago
  • #1296 - switch from TravisCI to AppVeyor for Linux builds (@merbla)
  • #1254, #1255 - reduce allocations in hot path (@Pliner)
  • #1300 - link Pluralsight courses (@dahlsailrunner)
  • #1312 - code clean-up (@sungam3r)
  • #1314, #1317 - code clean-up (@SimonCropp)
  • #1315 - reduce allocations in hot path (@nblumhardt)
  • #1266 - update package license declaration to the new format (@tsimbalar)
  • #1316 - support wrapped enrichers, conditional sinks, and conditional enrichers (@nblumhardt)
  • #1320 - publish snupkg symbol packages (@teo-tsirpanis)
  • #1325 - respect explicit format specifiers when using JSON formatting defaults (@nblumhardt)
  • #1330 - make the nullable format provider syntactically optional when constructing MessageTemplateTextFormatter (@bender2k14)
  • #1341 - remove redundant System.Collections.NonGeneric dependency from netstandard2.0 target (@WeihanLi)
  • #1348 - add INFLUENCES.md (@nblumhardt)
  • #1357 - fix API documentation for default destructuring depth (@rob-earwaker)
  • #1366 - fix message template parsing of custom format strings that contain + (@martinh2011)

v2.8.0

5 years ago
  • #1179 - support for Destructure.AsScalar(type) in key-value settings (@tsimbalar)
  • #1174 - partial support for Destructure.Xxx() in key-value settings (@tsimbalar)
  • #1192 - support for Destructure.With(policy) in key-value settings (@tsimbalar)
  • #1189 - renew certificate to fix UWP integration tests (@skomis-mm)
  • #1197 - make it simple to compare Logger.Instance with Logger.None (@ie-zero)
  • #1198 - support *.With(...) and AuditTo.Sink(sink)/WriteTo.Sink(sink) in key-value settings (@tsimbalar)
  • #1220 - include repositoryUrl in the NuGet package (@MaximRouiller)
  • #1233 - fix padding of non-string values in output templates (@nblumhardt)
  • #1169 - update performance tests to netcoreapp2.0 (@merbla)
  • #1234 - add tests for custom IFormatProvider support (@tsimbalar)
  • #1236 - fix failure/exception thrown when calling ForContext() to destructure some generated proxy types (@balayoglu)
  • #1269 - add netstandard2.0 target to shrink dependency graph on compatible platforms (@nblumhardt)