Skip to content

Commit ed9c049

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

File tree

3 files changed

+118
-9
lines changed

3 files changed

+118
-9
lines changed

src/Serilog.Settings.Configuration/Settings/Configuration/ConfigurationReader.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,8 @@ internal static IList<MethodInfo> FindSinkConfigurationMethods(IReadOnlyCollecti
374374
internal static IList<MethodInfo> FindAuditSinkConfigurationMethods(IReadOnlyCollection<Assembly> configurationAssemblies)
375375
{
376376
var found = FindConfigurationExtensionMethods(configurationAssemblies, typeof(LoggerAuditSinkConfiguration));
377-
377+
if (configurationAssemblies.Contains(typeof(LoggerAuditSinkConfiguration).GetTypeInfo().Assembly))
378+
found.AddRange(SurrogateConfigurationMethods.AuditTo);
378379
return found;
379380
}
380381

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

Lines changed: 35 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,14 @@ public static IEnumerable<MethodInfo> WriteTo
2727
}
2828
}
2929

30+
public static IEnumerable<MethodInfo> AuditTo
31+
{
32+
get
33+
{
34+
yield return GetSurrogateConfigurationMethod<LoggerAuditSinkConfiguration, ILogEventSink, LoggingLevelSwitch>((c, sink, s) => Sink(c, sink, LevelAlias.Minimum, s));
35+
}
36+
}
37+
3038
public static IEnumerable<MethodInfo> Filter
3139
{
3240
get
@@ -66,7 +74,9 @@ invocation expressions as surrogates so that SelectConfigurationMethod
6674
has a way to match and invoke these instance methods.
6775
*/
6876

69-
internal static LoggerConfiguration Sink(
77+
// .WriteTo...
78+
// ========
79+
static LoggerConfiguration Sink(
7080
LoggerSinkConfiguration loggerSinkConfiguration,
7181
ILogEventSink sink,
7282
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
@@ -75,10 +85,32 @@ internal static LoggerConfiguration Sink(
7585
return loggerSinkConfiguration.Sink(sink, restrictedToMinimumLevel, levelSwitch);
7686
}
7787

88+
static LoggerConfiguration Logger(
89+
LoggerSinkConfiguration loggerSinkConfiguration,
90+
Action<LoggerConfiguration> configureLogger,
91+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
92+
LoggingLevelSwitch levelSwitch = null)
93+
=> loggerSinkConfiguration.Logger(configureLogger, restrictedToMinimumLevel, levelSwitch);
94+
95+
// .AuditTo...
96+
// ========
97+
static LoggerConfiguration Sink(
98+
LoggerAuditSinkConfiguration auditSinkConfiguration,
99+
ILogEventSink sink,
100+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
101+
LoggingLevelSwitch levelSwitch = null)
102+
{
103+
return auditSinkConfiguration.Sink(sink, restrictedToMinimumLevel, levelSwitch);
104+
}
105+
106+
// .Filter...
107+
// =======
78108
// TODO: add overload for array argument (ILogEventEnricher[])
79109
static LoggerConfiguration With(LoggerFilterConfiguration loggerFilterConfiguration, ILogEventFilter filter)
80110
=> loggerFilterConfiguration.With(filter);
81111

112+
// .Destructure...
113+
// ============
82114
// TODO: add overload for array argument (IDestructuringPolicy[])
83115
static LoggerConfiguration With(LoggerDestructuringConfiguration loggerDestructuringConfiguration, IDestructuringPolicy policy)
84116
=> loggerDestructuringConfiguration.With(policy);
@@ -95,15 +127,10 @@ static LoggerConfiguration ToMaximumCollectionCount(LoggerDestructuringConfigura
95127
static LoggerConfiguration AsScalar(LoggerDestructuringConfiguration loggerDestructuringConfiguration, Type scalarType)
96128
=> loggerDestructuringConfiguration.AsScalar(scalarType);
97129

130+
// .Enrich...
131+
// =======
98132
static LoggerConfiguration FromLogContext(LoggerEnrichmentConfiguration loggerEnrichmentConfiguration)
99133
=> loggerEnrichmentConfiguration.FromLogContext();
100134

101-
// Unlike the other configuration methods, Logger is an instance method rather than an extension.
102-
static LoggerConfiguration Logger(
103-
LoggerSinkConfiguration loggerSinkConfiguration,
104-
Action<LoggerConfiguration> configureLogger,
105-
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
106-
LoggingLevelSwitch levelSwitch = null)
107-
=> loggerSinkConfiguration.Logger(configureLogger, restrictedToMinimumLevel, levelSwitch);
108135
}
109136
}

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

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -881,5 +881,86 @@ public void WriteToSinkIsAppliedWithCustomSinkAndLevelSwitch()
881881

882882
Assert.Single(DummyRollingFileSink.Emitted);
883883
}
884+
885+
886+
[Fact]
887+
public void AuditToSinkIsAppliedWithCustomSink()
888+
{
889+
var json = $@"{{
890+
""Serilog"": {{
891+
""Using"": [""TestDummies""],
892+
""AuditTo"": [
893+
{{
894+
""Name"": ""Sink"",
895+
""Args"": {{
896+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}""
897+
}}
898+
}}]
899+
}}
900+
}}";
901+
902+
var log = ConfigFromJson(json)
903+
.CreateLogger();
904+
905+
DummyRollingFileSink.Reset();
906+
log.Write(Some.InformationEvent());
907+
908+
Assert.Single(DummyRollingFileSink.Emitted);
909+
}
910+
911+
[Fact]
912+
public void AuditToSinkIsAppliedWithCustomSinkAndMinimumLevel()
913+
{
914+
var json = $@"{{
915+
""Serilog"": {{
916+
""Using"": [""TestDummies""],
917+
""AuditTo"": [
918+
{{
919+
""Name"": ""Sink"",
920+
""Args"": {{
921+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}"",
922+
""restrictedToMinimumLevel"": ""Warning""
923+
}}
924+
}}]
925+
}}
926+
}}";
927+
928+
var log = ConfigFromJson(json)
929+
.CreateLogger();
930+
931+
DummyRollingFileSink.Reset();
932+
log.Write(Some.InformationEvent());
933+
log.Write(Some.WarningEvent());
934+
935+
Assert.Single(DummyRollingFileSink.Emitted);
936+
}
937+
938+
[Fact]
939+
public void AuditToSinkIsAppliedWithCustomSinkAndLevelSwitch()
940+
{
941+
var json = $@"{{
942+
""Serilog"": {{
943+
""Using"": [""TestDummies""],
944+
""LevelSwitches"": {{""$switch1"": ""Warning"" }},
945+
""AuditTo"": [
946+
{{
947+
""Name"": ""Sink"",
948+
""Args"": {{
949+
""sink"": ""{typeof(DummyRollingFileSink).AssemblyQualifiedName}"",
950+
""levelSwitch"": ""$switch1""
951+
}}
952+
}}]
953+
}}
954+
}}";
955+
956+
var log = ConfigFromJson(json)
957+
.CreateLogger();
958+
959+
DummyRollingFileSink.Reset();
960+
log.Write(Some.InformationEvent());
961+
log.Write(Some.WarningEvent());
962+
963+
Assert.Single(DummyRollingFileSink.Emitted);
964+
}
884965
}
885966
}

0 commit comments

Comments
 (0)