v3.0.0
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
- Change exception message by @sungam3r in #1762
- Avoided
IEnumerator
allocation (#1769) by @igor84 in #1770 - Avoid iterator allocations when working with SequenceValue by @sungam3r in #1785
- Add API approval test by @sungam3r in #1783
- Bump Newtonsoft.Json from 13.0.1 to 13.0.2 in /test/Serilog.Tests by @dependabot in #1787
- Introduce
ScalarValue.Null
by @sungam3r in #1774 Tokens
->TokenArray
by @sungam3r in #1778- Drop
netstandard1.3
andnetstandard1.0
support by @SimonCropp in #1807 - Remove
JsonFormatter.Escape
by @SimonCropp in #1804 - Use
WriteLine(char)
by @SimonCropp in #1803 - Remove extension of
JsonFormatter
by subclassing by @SimonCropp in #1801 - Remove redundant overrides from
LoggerSinkConfiguration
by @SimonCropp in #1800 - Avoid
StringWriter.ToString()
calls by @sungam3r in #1782 - Remove the obsolete
RawFormatter
type by @nblumhardt in #1808 - .NET 7 SDK by @SimonCropp in #1806
- Remove
OutputProperties.GetOutputProperties()
by @SimonCropp in #1805 - Verify API by @SimonCropp in #1809
- Remove redundant nullable suppressions by @SimonCropp in #1810
- Remove duplicate
Where()
calls inFindConfigurationMethods()
by @SimonCropp in #1812 - Remove
net45
support by @SimonCropp in #1811 - Remove redundant
GetTypeInfo()
inLoadConfigurationAssemblies
by @SimonCropp in #1817 - Remove
GetTypeInfo()
fromFindConfigurationMethods(()
by @SimonCropp in #1815 - Remove redundant
GetTypeInfo()
inEnumScalarConversionPolicy
by @SimonCropp in #1816 - Remove obsolete
PropertyToken
constructor by @SimonCropp in #1819 switch
expressions by @SimonCropp in #1818- Do not allocate strings for
TextWriter.Write()
by @sungam3r in #1775 - Simplify reflection in
SettingValueConversions
by @SimonCropp in #1814 - Improve
GetPropertiesRecursive()
performance by @SimonCropp in #1813 - Use
Convert.ToHexString()
inByteArrayScalarConversionPolicy()
by @sungam3r in #1776 - Remove
FEATURE_ASYNCLOCAL
by @SimonCropp in #1822 - Remove
FEATURE_HASHTABLE
by @SimonCropp in #1823 - Use
IsEnum
for enum check inEnumScalarConversionPolicy
by @SimonCropp in #1825 - Comments on
Hashtable
use inMessageTemplateCache
by @SimonCropp in #1828 - Remove
GetTypeInfo()
fromPropertyValueConverter
by @SimonCropp in #1824 - Avoid repeated
GetType()
inPropertyValueConverter
by @SimonCropp in #1832 - Leverage dictionary
TryAdd()
and items constructor by @SimonCropp in #1830 - Use array instead of list when we know the size in
PropertyValueConverter
by @SimonCropp in #1831 - Move
net46
target tonet461
by @SimonCropp in #1827 - Clean up
JsonValueFormatter
by @SimonCropp in #1835 var
inJsonFormatter
by @SimonCropp in #1838- Remove obsolete
SelfLog.Out
by @SimonCropp in #1837 - Remove obsolete
JsonFormatter
omitEnclosingObject
overload by @SimonCropp in #1834 - Remove obsolete
PushProperties()
by @SimonCropp in #1836 - No point putting
_minimumLevel
and_levelSwitch
on stack by @SimonCropp in #1840 - Avoid casting enum to
int
where possible by @SimonCropp in #1841 - Leverage nullable char in
JsonFormatter
by @SimonCropp in #1839 - Use correct overload with
char
inJsonFormatter
by @sungam3r in #1842 - Annotate Serilog for trimming by @agocke in #1690
- Fix
net471
DisableImplicitFrameworkReferences
by @SimonCropp in #1846 - Fix 461
TargetFramework
constants in tests by @SimonCropp in #1847 - Missing API approval by @SimonCropp in #1848
net471
supportsITuple
by @SimonCropp in #1849- Remove
FEATURE_GETCURRENTMETHOD
const by @SimonCropp in #1851 - macOS CI by @SimonCropp in #1858
- Run tests on mac by @SimonCropp in #1860
- BenchmarkDotNet 0.13.5 by @SimonCropp in #1861
- Cache empty text token by @SimonCropp in #1859
- Simplify
PublicApi_Should_Not_Change_Unintentionally()
test by @SimonCropp in #1864 - Move from
net461
tonet462
by @SimonCropp in #1863 - Remove redundant
GetPackagingOutputs
by @SimonCropp in #1867 - Use char delimiters by @SimonCropp in #1868
- Remove redundant reference assemblies by @SimonCropp in #1866
- Introduce PolySharp by @sungam3r in #1845
- Missing PolySharp changes by @SimonCropp in #1869
- Simplify build scripts by @SimonCropp in #1865
- Added
ReusableStringWriter
by @igor84 in #1771 - PublicApiGenerator v11 by @SimonCropp in #1877
- Use
langword
in XML comments by @sungam3r in #1871 - Avoid creating
SafeAggregateSink
wrapper around empty list by @sungam3r in #1878 - Remove obsolete classes by @sungam3r in #1874
- Add space settings by @sungam3r in #1885
- Make
Alignment
andLevelOverrides
readonly by @sungam3r in #1884 - Remove redundant
CallerArgumentExpressionAttribute
by @SimonCropp in #1886 - Remove
MessageTemplateToken.StartIndex
by @SimonCropp in #1882 - Microsoft.NET.Test.Sdk 17.5.0 by @SimonCropp in #1862
- Throw, rather than exit, when any command in the build script fails by @nblumhardt in #1887
- Suppress some warnings, tidy up some namespacing by @nblumhardt in #1888
- Reinstate
LoggerSinkConfiguration.Sink(ILogEventSink, LogEventLevel)
by @nblumhardt in #1889 - Avoid some alloc with
Array.Empty
by @SimonCropp in #1898 - Destructure
ReadOnlyDictionary
asDictionary
by @sungam3r in #1897 - Remove redundant
IDictionary
cast by @SimonCropp in #1900 - Adding ability to dispose nested loggers in
WriteTo.Logger()
by @srogovtsev in #1890 - Optimize
AddPropertyIfAbsent
by @sungam3r in #1872 - Accept/pass through the standard
levelSwitch
option inWriteTo.Logger()
by @nblumhardt in #1902 - Add
net47
target by @SimonCropp in #1905 - Annotate
WithProperty()
by @sungam3r in #1907 - Add
LoggingLevelSwitch.MinimumLevelChanged
by @sungam3r in #1908 - Fix #1464, don't log parameter count mismatch message incorrectly by @nblumhardt in #1903
- Add
Destructure.AsDictionary<T>()
by @sungam3r in #1906 - Add
LevelAlias.Off
; fixes #1684 by @nblumhardt in #1910 - Use
JsonValueFormatter
to implement classicJsonFormatter
by @nblumhardt in #1911 - Include
README.md
in the NuGet package for display on nuget.org by @nblumhardt in #1916