Skip to content

Commit ff4fbe1

Browse files
committed
Restructured sink classes internally.
1 parent f333ce6 commit ff4fbe1

File tree

2 files changed

+104
-61
lines changed

2 files changed

+104
-61
lines changed

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/MSSqlServerAuditSink.cs

Lines changed: 57 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
namespace Serilog.Sinks.MSSqlServer
2424
{
2525
/// <summary>
26-
/// Writes log events as rows in a table of MSSqlServer database using Audit logic, meaning that each row is synchronously committed
27-
/// and any errors that occur are propagated to the caller.
26+
/// Writes log events as rows in a table of MSSqlServer database using Audit logic, meaning that each row is synchronously committed
27+
/// and any errors that occur are propagated to the caller.
2828
/// </summary>
2929
public class MSSqlServerAuditSink : ILogEventSink, IDisposable
3030
{
@@ -83,39 +83,28 @@ internal MSSqlServerAuditSink(
8383
ColumnOptions columnOptions,
8484
SinkDependencies sinkDependencies)
8585
{
86-
if (sinkOptions?.TableName == null)
87-
{
88-
throw new InvalidOperationException("Table name must be specified!");
89-
}
90-
91-
if (columnOptions.DisableTriggers)
92-
throw new NotSupportedException($"The {nameof(ColumnOptions.DisableTriggers)} option is not supported for auditing.");
93-
94-
if (sinkDependencies == null)
95-
{
96-
throw new ArgumentNullException(nameof(sinkDependencies));
97-
}
98-
_sqlLogEventWriter = sinkDependencies?.SqlLogEventWriter ?? throw new InvalidOperationException($"SqlLogEventWriter is not initialized!");
86+
ValidateParameters(sinkOptions, columnOptions);
87+
CheckSinkDependencies(sinkDependencies);
9988

100-
if (sinkOptions.AutoCreateSqlTable)
101-
{
102-
if (sinkDependencies?.DataTableCreator == null)
103-
{
104-
throw new InvalidOperationException($"DataTableCreator is not initialized!");
105-
}
89+
_sqlLogEventWriter = sinkDependencies.SqlLogEventWriter;
10690

107-
using (var eventTable = sinkDependencies.DataTableCreator.CreateDataTable())
108-
{
109-
sinkDependencies.SqlTableCreator.CreateTable(eventTable);
110-
}
111-
}
91+
CreateTable(sinkOptions, sinkDependencies);
11292
}
11393

11494
/// <summary>Emit the provided log event to the sink.</summary>
11595
/// <param name="logEvent">The log event to write.</param>
11696
public void Emit(LogEvent logEvent) =>
11797
_sqlLogEventWriter.WriteEvent(logEvent);
11898

99+
/// <summary>
100+
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
101+
/// </summary>
102+
public void Dispose()
103+
{
104+
Dispose(true);
105+
GC.SuppressFinalize(this);
106+
}
107+
119108
/// <summary>
120109
/// Releases the unmanaged resources used by the Serilog.Sinks.MSSqlServer.MSSqlServerAuditSink and optionally
121110
/// releases the managed resources.
@@ -126,13 +115,49 @@ protected virtual void Dispose(bool disposing)
126115
// This class needn't to dispose anything. This is just here for sink interface compatibility.
127116
}
128117

129-
/// <summary>
130-
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
131-
/// </summary>
132-
public void Dispose()
118+
private static void ValidateParameters(SinkOptions sinkOptions, ColumnOptions columnOptions)
133119
{
134-
Dispose(true);
135-
GC.SuppressFinalize(this);
120+
if (sinkOptions?.TableName == null)
121+
{
122+
throw new InvalidOperationException("Table name must be specified!");
123+
}
124+
125+
if (columnOptions.DisableTriggers)
126+
throw new NotSupportedException($"The {nameof(ColumnOptions.DisableTriggers)} option is not supported for auditing.");
127+
}
128+
129+
private static void CheckSinkDependencies(SinkDependencies sinkDependencies)
130+
{
131+
if (sinkDependencies == null)
132+
{
133+
throw new ArgumentNullException(nameof(sinkDependencies));
134+
}
135+
136+
if (sinkDependencies.DataTableCreator == null)
137+
{
138+
throw new InvalidOperationException($"DataTableCreator is not initialized!");
139+
}
140+
141+
if (sinkDependencies.SqlTableCreator == null)
142+
{
143+
throw new InvalidOperationException($"SqlTableCreator is not initialized!");
144+
}
145+
146+
if (sinkDependencies.SqlLogEventWriter == null)
147+
{
148+
throw new InvalidOperationException($"SqlLogEventWriter is not initialized!");
149+
}
150+
}
151+
152+
private static void CreateTable(SinkOptions sinkOptions, SinkDependencies sinkDependencies)
153+
{
154+
if (sinkOptions.AutoCreateSqlTable)
155+
{
156+
using (var eventTable = sinkDependencies.DataTableCreator.CreateDataTable())
157+
{
158+
sinkDependencies.SqlTableCreator.CreateTable(eventTable);
159+
}
160+
}
136161
}
137162
}
138163
}

src/Serilog.Sinks.MSSqlServer/Sinks/MSSqlServer/MSSqlServerSink.cs

Lines changed: 47 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
namespace Serilog.Sinks.MSSqlServer
2727
{
2828
/// <summary>
29-
/// Writes log events as rows in a table of MSSqlServer database.
29+
/// Writes log events as rows in a table of MSSqlServer database.
3030
/// </summary>
3131
public class MSSqlServerSink : PeriodicBatchingSink
3232
{
@@ -104,48 +104,27 @@ internal MSSqlServerSink(
104104
SinkDependencies sinkDependencies)
105105
: base(sinkOptions?.BatchPostingLimit ?? DefaultBatchPostingLimit, sinkOptions?.BatchPeriod ?? DefaultPeriod)
106106
{
107-
if (sinkOptions?.TableName == null)
108-
{
109-
throw new InvalidOperationException("Table name must be specified!");
110-
}
111-
112-
if (sinkDependencies == null)
113-
{
114-
throw new ArgumentNullException(nameof(sinkDependencies));
115-
}
107+
ValidateParameters(sinkOptions);
108+
CheckSinkDependencies(sinkDependencies);
116109

117-
_sqlBulkBatchWriter = sinkDependencies?.SqlBulkBatchWriter ?? throw new InvalidOperationException($"SqlBulkBatchWriter is not initialized!");
118-
119-
if (sinkDependencies?.DataTableCreator == null)
120-
{
121-
throw new InvalidOperationException($"DataTableCreator is not initialized!");
122-
}
110+
_sqlBulkBatchWriter = sinkDependencies.SqlBulkBatchWriter;
123111
_eventTable = sinkDependencies.DataTableCreator.CreateDataTable();
124112

125-
if (sinkOptions.AutoCreateSqlTable)
126-
{
127-
if (sinkDependencies?.SqlBulkBatchWriter == null)
128-
{
129-
throw new InvalidOperationException($"SqlTableCreator is not initialized!");
130-
}
131-
sinkDependencies.SqlTableCreator.CreateTable(_eventTable);
132-
}
113+
CreateTable(sinkOptions, sinkDependencies);
133114
}
134115

135116
/// <summary>
136-
/// Emit a batch of log events, running asynchronously.
117+
/// Emit a batch of log events, running asynchronously.
137118
/// </summary>
138119
/// <param name="events">The events to emit.</param>
139120
/// <remarks>
140-
/// Override either <see cref="PeriodicBatchingSink.EmitBatch" /> or <see cref="PeriodicBatchingSink.EmitBatchAsync" />
141-
/// ,
142-
/// not both.
121+
/// Override either <see cref="PeriodicBatchingSink.EmitBatch" /> or <see cref="PeriodicBatchingSink.EmitBatchAsync" />, not both.
143122
/// </remarks>
144123
protected override Task EmitBatchAsync(IEnumerable<LogEvent> events) =>
145124
_sqlBulkBatchWriter.WriteBatch(events, _eventTable);
146125

147126
/// <summary>
148-
/// Disposes the connection
127+
/// Disposes the connection
149128
/// </summary>
150129
/// <param name="disposing"></param>
151130
protected override void Dispose(bool disposing)
@@ -156,5 +135,44 @@ protected override void Dispose(bool disposing)
156135
_eventTable.Dispose();
157136
}
158137
}
138+
139+
private static void ValidateParameters(SinkOptions sinkOptions)
140+
{
141+
if (sinkOptions?.TableName == null)
142+
{
143+
throw new InvalidOperationException("Table name must be specified!");
144+
}
145+
}
146+
147+
private static void CheckSinkDependencies(SinkDependencies sinkDependencies)
148+
{
149+
if (sinkDependencies == null)
150+
{
151+
throw new ArgumentNullException(nameof(sinkDependencies));
152+
}
153+
154+
if (sinkDependencies.DataTableCreator == null)
155+
{
156+
throw new InvalidOperationException($"DataTableCreator is not initialized!");
157+
}
158+
159+
if (sinkDependencies.SqlTableCreator == null)
160+
{
161+
throw new InvalidOperationException($"SqlTableCreator is not initialized!");
162+
}
163+
164+
if (sinkDependencies.SqlBulkBatchWriter == null)
165+
{
166+
throw new InvalidOperationException($"SqlBulkBatchWriter is not initialized!");
167+
}
168+
}
169+
170+
private void CreateTable(SinkOptions sinkOptions, SinkDependencies sinkDependencies)
171+
{
172+
if (sinkOptions.AutoCreateSqlTable)
173+
{
174+
sinkDependencies.SqlTableCreator.CreateTable(_eventTable);
175+
}
176+
}
159177
}
160178
}

0 commit comments

Comments
 (0)