Skip to content

Commit 78c6b97

Browse files
committed
Merge pull request #9 from serilog/dev
Improved formatting support for TCP & UDP
2 parents 76cd9b0 + 2cef112 commit 78c6b97

File tree

9 files changed

+373
-97
lines changed

9 files changed

+373
-97
lines changed

CHANGES.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,8 @@
99
- Deprecated Splunk HTTP Sink using Management Port/API
1010

1111
##1.6.50
12-
- Streaming support for Event Collector
12+
- Streaming support for Event Collector
13+
14+
##1.7
15+
- Better support for formatting including [#578](https://github.com/serilog/serilog/issues/578)
16+
- Cleanup on Event Collector

sample/Serilog.Sinks.Splunk.Sample/Program.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ namespace Serilog.Sinks.Splunk.Sample
88
{
99
class Program
1010
{
11+
public static string EventCollectorToken = "DC279305-1816-44D6-9D7A-6CBB70F0A049";
12+
1113
static void Main(string[] args)
1214
{
1315
var stub = new Stub();
@@ -26,7 +28,7 @@ static void Main(string[] args)
2628

2729
stub.Run();
2830

29-
var range = Enumerable.Range(0, 10000);
31+
var range = Enumerable.Range(0, 100);
3032

3133
foreach (var i in range)
3234
{
@@ -45,7 +47,7 @@ public void Configure()
4547

4648
Log.Logger = new LoggerConfiguration()
4749
.WriteTo.LiterateConsole()
48-
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector", "685546AE-0278-4786-97C4-5971676D5D70",
50+
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector", Program.EventCollectorToken,
4951
renderTemplate:false,
5052
batchSizeLimit:150,
5153
batchIntervalInSeconds:5)
@@ -65,7 +67,7 @@ public void Configure()
6567
Log.Logger = new LoggerConfiguration()
6668
.WriteTo.LiterateConsole()
6769
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector",
68-
"685546AE-0278-4786-97C4-5971676D5D70",
70+
Program.EventCollectorToken,
6971
"Serilog",
7072
"",
7173
Environment.MachineName,

src/Serilog.Sinks.Splunk.FullNetFx/LoggerConfigurationSplunkExtensions.cs

Lines changed: 85 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
using System.Net;
1717
using Serilog.Configuration;
1818
using Serilog.Events;
19+
using Serilog.Formatting;
1920
using Serilog.Formatting.Display;
2021
using Serilog.Sinks.Splunk;
2122

@@ -26,6 +27,46 @@ namespace Serilog
2627
/// </summary>
2728
public static class LoggerConfigurationSplunkExtensions
2829
{
30+
/// <summary>
31+
/// Adds a sink that writes log events as to a Splunk instance via UDP.
32+
/// </summary>
33+
/// <param name="loggerConfiguration">The logger config</param>
34+
/// <param name="connectionInfo"></param>
35+
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
36+
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
37+
/// <param name="renderTemplate">If true, the message template is rendered</param>
38+
/// <returns></returns>
39+
public static LoggerConfiguration SplunkViaUdp(
40+
this LoggerSinkConfiguration loggerConfiguration,
41+
SplunkUdpSinkConnectionInfo connectionInfo,
42+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
43+
IFormatProvider formatProvider = null,
44+
bool renderTemplate = true)
45+
{
46+
var sink = new UdpSink(connectionInfo, formatProvider, renderTemplate);
47+
48+
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
49+
}
50+
51+
/// <summary>
52+
/// Adds a sink that writes log events as to a Splunk instance via UDP.
53+
/// </summary>
54+
/// <param name="loggerConfiguration">The logger config</param>
55+
/// <param name="connectionInfo"></param>
56+
/// <param name="formatter">Custom formatter to use if you e.g. do not want to use the JsonFormatter.</param>
57+
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
58+
/// <returns></returns>
59+
public static LoggerConfiguration SplunkViaUdp(
60+
this LoggerSinkConfiguration loggerConfiguration,
61+
SplunkUdpSinkConnectionInfo connectionInfo,
62+
ITextFormatter formatter,
63+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
64+
{
65+
var sink = new UdpSink(connectionInfo, formatter);
66+
67+
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
68+
}
69+
2970
/// <summary>
3071
/// Adds a sink that writes log events as to a Splunk instance via UDP.
3172
/// </summary>
@@ -37,6 +78,7 @@ public static class LoggerConfigurationSplunkExtensions
3778
/// <param name="renderTemplate">If ture, the message template will be rendered</param>
3879
/// <returns></returns>
3980
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
81+
[Obsolete("Use the overload accepting a connection info object instead. This overload will be removed.", false)]
4082
public static LoggerConfiguration SplunkViaUdp(
4183
this LoggerSinkConfiguration loggerConfiguration,
4284
string host,
@@ -62,6 +104,7 @@ public static LoggerConfiguration SplunkViaUdp(
62104
/// <param name="renderTemplate">If ture, the message template is rendered</param>
63105
/// <returns>The logger configuration</returns>
64106
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
107+
[Obsolete("Use the overload accepting a connection info object instead. This overload will be removed.", false)]
65108
public static LoggerConfiguration SplunkViaUdp(
66109
this LoggerSinkConfiguration loggerConfiguration,
67110
IPAddress hostAddresss,
@@ -75,6 +118,46 @@ public static LoggerConfiguration SplunkViaUdp(
75118
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
76119
}
77120

121+
/// <summary>
122+
/// Adds a sink that writes log events as to a Splunk instance via TCP.
123+
/// </summary>
124+
/// <param name="loggerConfiguration">The logger config</param>
125+
/// <param name="connectionInfo"></param>
126+
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
127+
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
128+
/// <param name="renderTemplate">If true, the message template is rendered</param>
129+
/// <returns></returns>
130+
public static LoggerConfiguration SplunkViaTcp(
131+
this LoggerSinkConfiguration loggerConfiguration,
132+
SplunkTcpSinkConnectionInfo connectionInfo,
133+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
134+
IFormatProvider formatProvider = null,
135+
bool renderTemplate = true)
136+
{
137+
var sink = new TcpSink(connectionInfo, formatProvider, renderTemplate);
138+
139+
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
140+
}
141+
142+
/// <summary>
143+
/// Adds a sink that writes log events as to a Splunk instance via TCP.
144+
/// </summary>
145+
/// <param name="loggerConfiguration">The logger config</param>
146+
/// <param name="connectionInfo"></param>
147+
/// <param name="formatter">Custom formatter to use if you e.g. do not want to use the JsonFormatter.</param>
148+
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
149+
/// <returns></returns>
150+
public static LoggerConfiguration SplunkViaTcp(
151+
this LoggerSinkConfiguration loggerConfiguration,
152+
SplunkTcpSinkConnectionInfo connectionInfo,
153+
ITextFormatter formatter,
154+
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
155+
{
156+
var sink = new TcpSink(connectionInfo, formatter);
157+
158+
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
159+
}
160+
78161
/// <summary>
79162
/// Adds a sink that writes log events as to a Splunk instance via TCP.
80163
/// </summary>
@@ -86,6 +169,7 @@ public static LoggerConfiguration SplunkViaUdp(
86169
/// <param name="renderTemplate">If true, the message template is rendered</param>
87170
/// <returns></returns>
88171
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
172+
[Obsolete("Use the overload accepting a connection info object instead. This overload will be removed.", false)]
89173
public static LoggerConfiguration SplunkViaTcp(
90174
this LoggerSinkConfiguration loggerConfiguration,
91175
IPAddress hostAddresss,
@@ -110,6 +194,7 @@ public static LoggerConfiguration SplunkViaTcp(
110194
/// <param name="renderTemplate">If ture, the message template is rendered</param>
111195
/// <returns></returns>
112196
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
197+
[Obsolete("Use the overload accepting a connection info object instead. This overload will be removed.", false)]
113198
public static LoggerConfiguration SplunkViaTcp(
114199
this LoggerSinkConfiguration loggerConfiguration,
115200
string host,
@@ -122,6 +207,5 @@ public static LoggerConfiguration SplunkViaTcp(
122207

123208
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
124209
}
125-
126210
}
127211
}

src/Serilog.Sinks.Splunk.FullNetFx/Serilog.Sinks.Splunk.FullNetFx.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@
8585
<Link>Properties\CommonAssemblyInfo.cs</Link>
8686
</Compile>
8787
<Compile Include="LoggerConfigurationSplunkExtensions.cs" />
88+
<Compile Include="Sinks\Splunk\SplunkTcpSinkConnectionInfo.cs" />
89+
<Compile Include="Sinks\Splunk\SplunkUdpSinkConnectionInfo.cs" />
8890
<Compile Include="Sinks\Splunk\TcpSink.cs" />
8991
<Compile Include="Sinks\Splunk\UdpSink.cs" />
9092
</ItemGroup>
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
using System.Net;
2+
3+
namespace Serilog.Sinks.Splunk
4+
{
5+
/// <summary>
6+
/// Defines connection info used to connect against Splunk
7+
/// using TCP.
8+
/// </summary>
9+
public class SplunkTcpSinkConnectionInfo
10+
{
11+
/// <summary>
12+
/// Default size of the socket writer queue.
13+
/// </summary>
14+
public const int DefaultMaxQueueSize = 10000;
15+
16+
/// <summary>
17+
/// Splunk host.
18+
/// </summary>
19+
public IPAddress Host { get; }
20+
21+
/// <summary>
22+
/// Splunk port.
23+
/// </summary>
24+
public int Port { get; }
25+
26+
/// <summary>
27+
/// Max Queue size for the TCP socket writer.
28+
/// See <see cref="DefaultMaxQueueSize"/> for default value (10000).
29+
/// </summary>
30+
public int MaxQueueSize { get; set; } = DefaultMaxQueueSize;
31+
32+
/// <summary>
33+
/// Creates an instance of <see cref="SplunkTcpSinkConnectionInfo"/> used
34+
/// for defining connection info for connecting using TCP against Splunk.
35+
/// </summary>
36+
/// <param name="host">Splunk host.</param>
37+
/// <param name="port">Splunk TCP port.</param>
38+
public SplunkTcpSinkConnectionInfo(string host, int port) : this(IPAddress.Parse(host), port){ }
39+
40+
/// <summary>
41+
/// Creates an instance of <see cref="SplunkTcpSinkConnectionInfo"/> used
42+
/// for defining connection info for connecting using TCP against Splunk.
43+
/// </summary>
44+
/// <param name="host">Splunk host.</param>
45+
/// <param name="port">Splunk TCP port.</param>
46+
public SplunkTcpSinkConnectionInfo(IPAddress host, int port)
47+
{
48+
Host = host;
49+
Port = port;
50+
}
51+
}
52+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using System.Net;
2+
3+
namespace Serilog.Sinks.Splunk
4+
{
5+
/// <summary>
6+
/// Defines connection info used to connect against Splunk
7+
/// using UDP.
8+
/// </summary>
9+
public class SplunkUdpSinkConnectionInfo
10+
{
11+
/// <summary>
12+
/// Splunk host.
13+
/// </summary>
14+
public IPAddress Host { get; }
15+
16+
/// <summary>
17+
/// Splunk port.
18+
/// </summary>
19+
public int Port { get; }
20+
21+
/// <summary>
22+
/// Creates an instance of <see cref="SplunkUdpSinkConnectionInfo"/> used
23+
/// for defining connection info for connecting using UDP against Splunk.
24+
/// </summary>
25+
/// <param name="host">Splunk host.</param>
26+
/// <param name="port">Splunk UDP port.</param>
27+
public SplunkUdpSinkConnectionInfo(string host, int port) : this(IPAddress.Parse(host), port){ }
28+
29+
/// <summary>
30+
/// Creates an instance of <see cref="SplunkUdpSinkConnectionInfo"/> used
31+
/// for defining connection info for connecting using UDP against Splunk.
32+
/// </summary>
33+
/// <param name="host">Splunk host.</param>
34+
/// <param name="port">Splunk UDP port.</param>
35+
public SplunkUdpSinkConnectionInfo(IPAddress host, int port)
36+
{
37+
Host = host;
38+
Port = port;
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)