Skip to content

Commit b98aba2

Browse files
committed
Add support for WriteTo.Sink()
Support for `WriteTo.Sink(ILogEventSink logEventSink, LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum, LoggingLevelSwitch levelSwitch = null)`
1 parent 2fe5f4f commit b98aba2

File tree

2 files changed

+92
-1
lines changed

2 files changed

+92
-1
lines changed

src/Serilog.Settings.Configuration/Settings/Configuration/SurrogateConfigurationMethods.cs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ public static IEnumerable<MethodInfo> WriteTo
2323
get
2424
{
2525
yield return GetSurrogateConfigurationMethod<LoggerSinkConfiguration, Action<LoggerConfiguration>, LoggingLevelSwitch>((c, a, s) => Logger(c, a, LevelAlias.Minimum, s));
26+
yield return GetSurrogateConfigurationMethod<LoggerSinkConfiguration, ILogEventSink, LoggingLevelSwitch>((c, sink, s) => Sink(c, sink, LevelAlias.Minimum, s));
2627
}
2728
}
2829

@@ -65,6 +66,15 @@ invocation expressions as surrogates so that SelectConfigurationMethod
6566
has a way to match and invoke these instance methods.
6667
*/
6768

69+
internal static LoggerConfiguration Sink(
70+
LoggerSinkConfiguration loggerSinkConfiguration,
71+
ILogEventSink sink,
72+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
73+
LoggingLevelSwitch levelSwitch = null)
74+
{
75+
return loggerSinkConfiguration.Sink(sink, restrictedToMinimumLevel, levelSwitch);
76+
}
77+
6878
// TODO: add overload for array argument (ILogEventEnricher[])
6979
static LoggerConfiguration With(LoggerFilterConfiguration loggerFilterConfiguration, ILogEventFilter filter)
7080
=> loggerFilterConfiguration.With(filter);

test/Serilog.Settings.Configuration.Tests/ConfigurationSettingsTests.cs

Lines changed: 82 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
using System;
1+
using System;
22
using Microsoft.Extensions.Configuration;
33
using Serilog.Core;
44
using Serilog.Events;
@@ -800,5 +800,86 @@ public void DestructuringAsScalarIsAppliedWithAssemblyQualifiedName()
800800

801801
Assert.IsType<ScalarValue>(prop);
802802
}
803+
804+
805+
[Fact]
806+
public void WriteToSinkIsAppliedWithCustomSink()
807+
{
808+
var json = $@"{{
809+
""Serilog"": {{
810+
""Using"": [""TestDummies""],
811+
""WriteTo"": [
812+
{{
813+
""Name"": ""Sink"",
814+
""Args"": {{
815+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}""
816+
}}
817+
}}]
818+
}}
819+
}}";
820+
821+
var log = ConfigFromJson(json)
822+
.CreateLogger();
823+
824+
DummyRollingFileSink.Reset();
825+
log.Write(Some.InformationEvent());
826+
827+
Assert.Single(DummyRollingFileSink.Emitted);
828+
}
829+
830+
[Fact]
831+
public void WriteToSinkIsAppliedWithCustomSinkAndMinimumLevel()
832+
{
833+
var json = $@"{{
834+
""Serilog"": {{
835+
""Using"": [""TestDummies""],
836+
""WriteTo"": [
837+
{{
838+
""Name"": ""Sink"",
839+
""Args"": {{
840+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}"",
841+
""restrictedToMinimumLevel"": ""Warning""
842+
}}
843+
}}]
844+
}}
845+
}}";
846+
847+
var log = ConfigFromJson(json)
848+
.CreateLogger();
849+
850+
DummyRollingFileSink.Reset();
851+
log.Write(Some.InformationEvent());
852+
log.Write(Some.WarningEvent());
853+
854+
Assert.Single(DummyRollingFileSink.Emitted);
855+
}
856+
857+
[Fact]
858+
public void WriteToSinkIsAppliedWithCustomSinkAndLevelSwitch()
859+
{
860+
var json = $@"{{
861+
""Serilog"": {{
862+
""Using"": [""TestDummies""],
863+
""LevelSwitches"": {{""$switch1"": ""Warning"" }},
864+
""WriteTo"": [
865+
{{
866+
""Name"": ""Sink"",
867+
""Args"": {{
868+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}"",
869+
""levelSwitch"": ""$switch1""
870+
}}
871+
}}]
872+
}}
873+
}}";
874+
875+
var log = ConfigFromJson(json)
876+
.CreateLogger();
877+
878+
DummyRollingFileSink.Reset();
879+
log.Write(Some.InformationEvent());
880+
log.Write(Some.WarningEvent());
881+
882+
Assert.Single(DummyRollingFileSink.Emitted);
883+
}
803884
}
804885
}

0 commit comments

Comments
 (0)