Skip to content

Commit af53e3c

Browse files
authored
Allow configuration of TransportConfiguration when using Sink helpers (#286)
1 parent 2a746e6 commit af53e3c

File tree

4 files changed

+61
-26
lines changed

4 files changed

+61
-26
lines changed

examples/Elastic.CommonSchema.Serilog.Sink.Example/Program.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,22 @@
2626

2727

2828
// -- Setup Serilog --
29+
var nodes = new[] { new Uri("http://localhost:9200") };
2930
Log.Logger = new LoggerConfiguration()
3031
.MinimumLevel.Debug()
3132
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
3233
.Enrich.FromLogContext()
34+
.WriteTo.Elasticsearch(nodes, opts =>
35+
{
36+
opts.BootstrapMethod = BootstrapMethod.Failure;
37+
opts.DataStream = new DataStreamName("logs", "console-example");
38+
opts.ConfigureChannel = channelOpts => {
39+
channelOpts.BufferOptions = new BufferOptions { ExportMaxConcurrency = 10 };
40+
};
41+
}, transport =>
42+
{
43+
//transport.Authentication();
44+
})
3345
// This is the bit that Elastic.CommonSchema.Serilog.Sink introduces
3446
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(client.Transport)
3547
{

src/Elastic.CommonSchema.Serilog.Sink/ElasticsearchSink.cs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,25 @@ public ElasticsearchSinkOptions(HttpTransport transport) : base(transport) { }
2727
public class ElasticsearchSinkOptions<TEcsDocument> where TEcsDocument : EcsDocument, new()
2828
{
2929
/// <inheritdoc cref="ElasticsearchSinkOptions"/>
30-
public ElasticsearchSinkOptions() : this(TransportHelper.Default()) { }
30+
public ElasticsearchSinkOptions() : this(new DefaultHttpTransport(TransportHelper.Default())) { }
3131

3232
/// <inheritdoc cref="ElasticsearchSinkOptions"/>
3333
public ElasticsearchSinkOptions(HttpTransport transport) => Transport = transport;
3434

3535
/// <inheritdoc cref="HttpTransport{TConfiguration}"/>
36-
public HttpTransport Transport { get; }
36+
internal HttpTransport Transport { get; }
37+
3738
/// <inheritdoc cref="EcsTextFormatterConfiguration{TEcsDocument}"/>
3839
public EcsTextFormatterConfiguration<TEcsDocument> TextFormatting { get; set; } = new();
40+
3941
/// <inheritdoc cref="DataStreamName"/>
4042
public DataStreamName DataStream { get; set; } = new("logs", "dotnet");
43+
4144
/// <summary>
4245
/// Allows you to configure the <see cref="EcsDataStreamChannel{TEcsDocument}"/> used by the sink to send data to Elasticsearch
4346
/// </summary>
4447
public Action<DataStreamChannelOptions<TEcsDocument>>? ConfigureChannel { get; set; }
48+
4549
/// <inheritdoc cref="BootstrapMethod"/>
4650
public BootstrapMethod BootstrapMethod { get; set; }
4751

src/Elastic.CommonSchema.Serilog.Sink/ElasticsearchSinkExtensions.cs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Collections.Generic;
3+
using Elastic.Transport;
34
using Serilog;
45
using Serilog.Configuration;
56

@@ -35,10 +36,13 @@ public static LoggerConfiguration Elasticsearch(
3536
this LoggerSinkConfiguration loggerConfiguration,
3637
ICollection<Uri> nodes,
3738
Action<ElasticsearchSinkOptions>? configureOptions = null,
39+
Action<TransportConfiguration>? configureTransport = null,
3840
bool useSniffing = true
3941
)
4042
{
41-
var sinkOptions = new ElasticsearchSinkOptions(useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes));
43+
var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes);
44+
configureTransport?.Invoke(transportConfig);
45+
var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig));
4246
configureOptions?.Invoke(sinkOptions);
4347

4448
return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions));
@@ -54,10 +58,13 @@ public static LoggerConfiguration Elasticsearch<TEcsDocument>(
5458
this LoggerSinkConfiguration loggerConfiguration,
5559
ICollection<Uri> nodes,
5660
Action<ElasticsearchSinkOptions<TEcsDocument>>? configureOptions = null,
61+
Action<TransportConfiguration>? configureTransport = null,
5762
bool useSniffing = true
5863
) where TEcsDocument : EcsDocument, new()
5964
{
60-
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes));
65+
var transportConfig = useSniffing ? TransportHelper.Static(nodes) : TransportHelper.Sniffing(nodes);
66+
configureTransport?.Invoke(transportConfig);
67+
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(new DefaultHttpTransport(transportConfig));
6168
configureOptions?.Invoke(sinkOptions);
6269

6370
return loggerConfiguration.Sink(new ElasticsearchSink<TEcsDocument>(sinkOptions));
@@ -73,10 +80,13 @@ public static LoggerConfiguration ElasticCloud(
7380
this LoggerSinkConfiguration loggerConfiguration,
7481
string cloudId,
7582
string apiKey,
76-
Action<ElasticsearchSinkOptions>? configureOptions = null
83+
Action<ElasticsearchSinkOptions>? configureOptions = null,
84+
Action<TransportConfiguration>? configureTransport = null
7785
)
7886
{
79-
var sinkOptions = new ElasticsearchSinkOptions(TransportHelper.Cloud(cloudId, apiKey));
87+
var transportConfig = TransportHelper.Cloud(cloudId, apiKey);
88+
configureTransport?.Invoke(transportConfig);
89+
var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig));
8090
configureOptions?.Invoke(sinkOptions);
8191

8292
return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions));
@@ -93,10 +103,13 @@ public static LoggerConfiguration ElasticCloud<TEcsDocument>(
93103
this LoggerSinkConfiguration loggerConfiguration,
94104
string cloudId,
95105
string apiKey,
96-
Action<ElasticsearchSinkOptions<TEcsDocument>>? configureOptions = null
106+
Action<ElasticsearchSinkOptions<TEcsDocument>>? configureOptions = null,
107+
Action<TransportConfiguration>? configureTransport = null
97108
) where TEcsDocument : EcsDocument, new()
98109
{
99-
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(TransportHelper.Cloud(cloudId, apiKey));
110+
var transportConfig = TransportHelper.Cloud(cloudId, apiKey);
111+
configureTransport?.Invoke(transportConfig);
112+
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(new DefaultHttpTransport(transportConfig));
100113
configureOptions?.Invoke(sinkOptions);
101114

102115
return loggerConfiguration.Sink(new ElasticsearchSink<TEcsDocument>(sinkOptions));
@@ -113,10 +126,13 @@ public static LoggerConfiguration ElasticCloud(
113126
string cloudId,
114127
string username,
115128
string password,
116-
Action<ElasticsearchSinkOptions>? configureOptions = null
129+
Action<ElasticsearchSinkOptions>? configureOptions = null,
130+
Action<TransportConfiguration>? configureTransport = null
117131
)
118132
{
119-
var sinkOptions = new ElasticsearchSinkOptions(TransportHelper.Cloud(cloudId, username, password));
133+
var transportConfig = TransportHelper.Cloud(cloudId, username, password);
134+
configureTransport?.Invoke(transportConfig);
135+
var sinkOptions = new ElasticsearchSinkOptions(new DefaultHttpTransport(transportConfig));
120136
configureOptions?.Invoke(sinkOptions);
121137

122138
return loggerConfiguration.Sink(new ElasticsearchSink(sinkOptions));
@@ -134,10 +150,13 @@ public static LoggerConfiguration ElasticCloud<TEcsDocument>(
134150
string cloudId,
135151
string username,
136152
string password,
137-
Action<ElasticsearchSinkOptions<TEcsDocument>>? configureOptions = null
153+
Action<ElasticsearchSinkOptions<TEcsDocument>>? configureOptions = null,
154+
Action<TransportConfiguration>? configureTransport = null
138155
) where TEcsDocument : EcsDocument, new()
139156
{
140-
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(TransportHelper.Cloud(cloudId, username, password));
157+
var transportConfig = TransportHelper.Cloud(cloudId, username, password);
158+
configureTransport?.Invoke(transportConfig);
159+
var sinkOptions = new ElasticsearchSinkOptions<TEcsDocument>(new DefaultHttpTransport(transportConfig));
141160
configureOptions?.Invoke(sinkOptions);
142161

143162
return loggerConfiguration.Sink(new ElasticsearchSink<TEcsDocument>(sinkOptions));

src/Elastic.CommonSchema.Serilog.Sink/TransportHelper.cs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,39 @@ namespace Elastic.CommonSchema.Serilog.Sink
99
{
1010
internal static class TransportHelper
1111
{
12-
private static ProductRegistration DefaultProduct = new ElasticsearchProductRegistration();
13-
public static HttpTransport Default() =>
14-
new DefaultHttpTransport(new TransportConfiguration(new Uri("http://localhost:9200"), DefaultProduct));
12+
private static readonly ProductRegistration DefaultProduct = new ElasticsearchProductRegistration();
1513

16-
public static HttpTransport Static(IEnumerable<string> nodes) => Static(nodes.Select(n => new Uri(n)));
14+
public static TransportConfiguration Default() =>
15+
new TransportConfiguration(new Uri("http://localhost:9200"), DefaultProduct);
1716

18-
public static HttpTransport Static(IEnumerable<Uri> nodes)
17+
public static TransportConfiguration Static(IEnumerable<string> nodes) => Static(nodes.Select(n => new Uri(n)));
18+
19+
public static TransportConfiguration Static(IEnumerable<Uri> nodes)
1920
{
2021
var pool = new StaticNodePool(nodes.Select(e => new Node(e)));
21-
return new DefaultHttpTransport(new TransportConfiguration(pool, productRegistration: DefaultProduct));
22+
return new TransportConfiguration(pool, productRegistration: DefaultProduct);
2223
}
2324

24-
public static HttpTransport Sniffing(IEnumerable<string> nodes) => Sniffing(nodes.Select(n => new Uri(n)));
25+
public static TransportConfiguration Sniffing(IEnumerable<string> nodes) => Sniffing(nodes.Select(n => new Uri(n)));
2526

26-
public static HttpTransport Sniffing(IEnumerable<Uri> nodes)
27+
public static TransportConfiguration Sniffing(IEnumerable<Uri> nodes)
2728
{
2829
var pool = new SniffingNodePool(nodes.Select(e => new Node(e)));
29-
return new DefaultHttpTransport(new TransportConfiguration(pool, productRegistration: DefaultProduct));
30+
return new TransportConfiguration(pool, productRegistration: DefaultProduct);
3031
}
3132

32-
public static HttpTransport Cloud(string cloudId, string apiKey)
33+
public static TransportConfiguration Cloud(string cloudId, string apiKey)
3334
{
3435
var header = new ApiKey(apiKey);
3536
var pool = new CloudNodePool(cloudId, header);
36-
return new DefaultHttpTransport(new TransportConfiguration(pool, productRegistration: DefaultProduct));
37+
return new TransportConfiguration(pool, productRegistration: DefaultProduct);
3738
}
3839

39-
public static HttpTransport Cloud(string cloudId, string username, string password)
40+
public static TransportConfiguration Cloud(string cloudId, string username, string password)
4041
{
4142
var header = new BasicAuthentication(username, password);
4243
var pool = new CloudNodePool(cloudId, header);
43-
return new DefaultHttpTransport(new TransportConfiguration(pool, productRegistration: DefaultProduct));
44+
return new TransportConfiguration(pool, productRegistration: DefaultProduct);
4445
}
45-
4646
}
4747
}

0 commit comments

Comments
 (0)