Skip to content

Commit 2686e04

Browse files
committed
feat: update log sink registration to support multiple payload types for message writers
1 parent 7df619b commit 2686e04

2 files changed

Lines changed: 17 additions & 8 deletions

File tree

src/LogSinks/AsyncLogSinkBase.cs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Diagnostics.CodeAnalysis;
34
using System.Linq;
45
using System.Threading;
@@ -83,13 +84,17 @@ public virtual void RegisterLogMessageWriter<TAsyncLogMessageWriter>()
8384
throw new ArgumentException($"The log message writer type must implement IAsyncLogMessageWriter<TPayload> for some payload type.", nameof(TAsyncLogMessageWriter));
8485
}
8586

86-
Type payloadType = logMessageWriterType.GetInterfaces()
87-
.First(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IAsyncLogMessageWriter<>))
88-
.GetGenericArguments()[0];
87+
IEnumerable<Type> payloadTypes = logMessageWriterType.GetInterfaces()
88+
.Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IAsyncLogMessageWriter<>))
89+
.Select(i => i.GetGenericArguments()[0]);
8990

90-
logMessageWriterPipeline.RegisterWriter(logMessageWriterType, payloadType);
91+
foreach (var payloadType in payloadTypes)
92+
{
93+
logMessageWriterPipeline.RegisterWriter(logMessageWriterType, payloadType);
94+
}
9195
}
9296

97+
9398
// ┌─────────────────────────────────────────────────────────────────────────────┐
9499
// │ Protected Methods │
95100
// └─────────────────────────────────────────────────────────────────────────────┘

src/LogSinks/LogSinkBase.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Linq;
34

45
namespace WB.Logging.LogSinks.Base;
@@ -80,11 +81,14 @@ public virtual void RegisterLogMessageWriter<TLogMessageWriter>()
8081
throw new ArgumentException($"The log message writer type must implement ILogMessageWriter<TPayload> for some payload type.", nameof(TLogMessageWriter));
8182
}
8283

83-
Type payloadType = logMessageWriterType.GetInterfaces()
84-
.First(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ILogMessageWriter<>))
85-
.GetGenericArguments()[0];
84+
IEnumerable<Type> payloadTypes = logMessageWriterType.GetInterfaces()
85+
.Where(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(ILogMessageWriter<>))
86+
.Select(i => i.GetGenericArguments()[0]);
8687

87-
logMessageWriterPipeline.RegisterWriter(logMessageWriterType, payloadType);
88+
foreach (var payloadType in payloadTypes)
89+
{
90+
logMessageWriterPipeline.RegisterWriter(logMessageWriterType, payloadType);
91+
}
8892
}
8993

9094
// ┌─────────────────────────────────────────────────────────────────────────────┐

0 commit comments

Comments
 (0)