Skip to content

Commit a820077

Browse files
committed
Merge pull request #6 from serilog/dev-v2
Splunk 6.3 Event Collector Sink
2 parents d0c63b3 + bb3656b commit a820077

21 files changed

+563
-557
lines changed

CHANGES.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
1.5
2-
* Moved the sink from its [original location](https://github.com/serilog/serilog)
3-
1.5.30
4-
* Added switch for template rendering
1+
##1.5.0
2+
- Moved the sink from its [original location](https://github.com/serilog/serilog)
3+
4+
##1.5.30
5+
- Added switch for template rendering
6+
7+
##1.6
8+
- Added support for Splunk 6.3 Event Collector
9+
- Deprecated Splunk HTTP Sink using Management Port/API

README.md

Lines changed: 8 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,40 +17,27 @@ To get started install the *Serilog.Sinks.Splunk* package from Visual Studio's *
1717
PM> Install-Package Serilog.Sinks.Splunk
1818
```
1919

20-
Set up to log via TCP
20+
Using the new Event Collector in Splunk 6.3
2121

22-
```csharp
22+
```csharp
2323
var log = new LoggerConfiguration()
24-
.WriteTo.SplunkViaTcp("127.0.0.1", 10001)
24+
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector", "myeventcollectortoken")
2525
.CreateLogger();
2626
```
2727

28-
Or maybe UDP
28+
Set up to log via TCP
2929

3030
```csharp
3131
var log = new LoggerConfiguration()
32-
.WriteTo.SplunkViaUdp("127.0.0.1", 10000)
32+
.WriteTo.SplunkViaTcp("127.0.0.1", 10001)
3333
.CreateLogger();
3434
```
3535

36-
Or maybe HTTP
36+
Or maybe UDP
3737

3838
```csharp
39-
var generalSplunkContext = new Context(Scheme.Https, "127.0.0.1", 8089);
40-
41-
var transmitterArgs = new TransmitterArgs
42-
{
43-
Source = "Splunk.Sample",
44-
SourceType = "Splunk Sample Source"
45-
};
46-
47-
const string username = "my splunk user";
48-
const string password = "my splunk password";
49-
const string splunkIndex = "mysplunktest";
50-
51-
var serilogContext = new SplunkContext(generalSplunkContext, splunkIndex, username, password, null, transmitterArgs);
52-
5339
var log = new LoggerConfiguration()
54-
.WriteTo.SplunkViaHttp(serilogContext, 10, TimeSpan.FromSeconds(5))
40+
.WriteTo.SplunkViaUdp("127.0.0.1", 10000)
5541
.CreateLogger();
5642
```
43+

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

Lines changed: 47 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Net;
23
using Splunk.Client;
34

45

@@ -9,14 +10,18 @@ class Program
910
static void Main(string[] args)
1011
{
1112
var stub = new Stub();
12-
13-
var http = new ViaHttp();
13+
;
1414
var tcp = new ViaTcp();
15-
var udp = new ViaHttp();
15+
var udp = new ViaUdp();
16+
var ec = new ViaEventCollector();
17+
var eco = new ViaEventCollectorWithExtendedOptions();
18+
19+
eco.Configure();
1620

17-
http.Configure();
18-
udp.Configure();
19-
tcp.Configure();
21+
//ec.Configure();
22+
23+
//udp.Configure();
24+
//tcp.Configure();
2025

2126
Log.Information("Simulation running, press any key to exit.");
2227

@@ -26,54 +31,58 @@ static void Main(string[] args)
2631
}
2732
}
2833

29-
class ViaTcp : IConfigure
34+
class ViaEventCollector : IConfigure
35+
{
36+
public void Configure()
37+
{
38+
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
39+
40+
Log.Logger = new LoggerConfiguration()
41+
.WriteTo.LiterateConsole()
42+
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector", "685546AE-0278-4786-97C4-5971676D5D70",renderTemplate:false)
43+
.Enrich.WithThreadId()
44+
.Enrich.WithProperty("Serilog.Sinks.Splunk.Sample", "ViaEventCollector")
45+
.MinimumLevel.Debug()
46+
.CreateLogger();
47+
}
48+
}
49+
50+
class ViaEventCollectorWithExtendedOptions : IConfigure
3051
{
3152
public void Configure()
3253
{
54+
ServicePointManager.ServerCertificateValidationCallback += (sender, cert, chain, sslPolicyErrors) => true;
55+
3356
Log.Logger = new LoggerConfiguration()
34-
.WriteTo.LiterateConsole()
35-
.WriteTo.SplunkViaTcp("127.0.0.1", 10001, renderTemplate: false)
36-
.Enrich.WithThreadId()
37-
.Enrich.WithProperty("SplunkSample", "ViaTCP")
38-
.MinimumLevel.Debug()
39-
.CreateLogger();
57+
.WriteTo.LiterateConsole()
58+
.WriteTo.SplunkViaEventCollector("https://mysplunk:8088/services/collector",
59+
"685546AE-0278-4786-97C4-5971676D5D70",
60+
"Serilog",
61+
"",
62+
Environment.MachineName,
63+
"" ,
64+
renderTemplate: false)
65+
.Enrich.WithThreadId()
66+
.Enrich.WithProperty("Serilog.Sinks.Splunk.Sample", "ViaEventCollector")
67+
.MinimumLevel.Debug()
68+
.CreateLogger();
4069
}
4170
}
4271

43-
class ViaHttp : IConfigure
72+
73+
class ViaTcp : IConfigure
4474
{
4575
public void Configure()
4676
{
47-
var generalSplunkContext = new global::Splunk.Client.Context(Scheme.Https, "127.0.0.1", 8089);
48-
49-
var transmitterArgs = new TransmitterArgs
50-
{
51-
Source = "Splunk.Sample",
52-
SourceType = "Splunk Sample Source"
53-
};
54-
55-
const string username = "my splunk user";
56-
const string password = "my splunk password";
57-
const string splunkIndex = "mysplunktest";
58-
59-
var serilogContext = new SplunkContext(
60-
generalSplunkContext,
61-
splunkIndex,
62-
username,
63-
password,
64-
null,
65-
transmitterArgs);
66-
6777
Log.Logger = new LoggerConfiguration()
6878
.WriteTo.LiterateConsole()
69-
.WriteTo.SplunkViaHttp(serilogContext, 100, TimeSpan.FromSeconds(10))
79+
.WriteTo.SplunkViaTcp("127.0.0.1", 10001, renderTemplate: false)
7080
.Enrich.WithThreadId()
71-
.Enrich.WithProperty("SplunkSample", "ViaHttp")
81+
.Enrich.WithProperty("Serilog.Sinks.Splunk.Sample", "ViaTCP")
7282
.MinimumLevel.Debug()
7383
.CreateLogger();
7484
}
75-
}
76-
85+
}
7786

7887
class ViaUdp : IConfigure
7988
{

serilog-sinks-splunk.sln

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
Microsoft Visual Studio Solution File, Format Version 12.00
3-
# Visual Studio 2013
4-
VisualStudioVersion = 12.0.31101.0
3+
# Visual Studio 14
4+
VisualStudioVersion = 14.0.23107.0
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Serilog.Sinks.Splunk", "src\Serilog.Sinks.Splunk\Serilog.Sinks.Splunk.csproj", "{1493ABC3-811C-46C7-92ED-CEB7567FB588}"
77
EndProject
@@ -12,6 +12,7 @@ EndProject
1212
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "assets", "assets", "{B9B13339-749C-4098-8845-780ED4FA488A}"
1313
ProjectSection(SolutionItems) = preProject
1414
Build.ps1 = Build.ps1
15+
CHANGES.md = CHANGES.md
1516
assets\CommonAssemblyInfo.cs = assets\CommonAssemblyInfo.cs
1617
README.md = README.md
1718
assets\Serilog.snk = assets\Serilog.snk

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

Lines changed: 8 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -16,82 +16,18 @@
1616
using System.Net;
1717
using Serilog.Configuration;
1818
using Serilog.Events;
19-
using Serilog.Sinks.Splunk;
20-
using Splunk.Client;
19+
using Serilog.Formatting.Display;
20+
using Serilog.Sinks.Splunk;
2121

2222
namespace Serilog
2323
{
2424
/// <summary>
25-
/// Adds the WriteTo.SplunkViaHttp() extension method to <see cref="LoggerConfiguration"/>.
25+
/// Adds the WriteTo.SplunkViaEventCollector() extension method to <see cref="LoggerConfiguration"/>.
2626
/// </summary>
2727
public static class LoggerConfigurationSplunkExtensions
2828
{
2929
/// <summary>
30-
/// Adds a sink that writes log events as to a Splunk instance via http.
31-
/// </summary>
32-
/// <param name="loggerConfiguration">The logger configuration.</param>
33-
/// <param name="context">The Splunk context to log to</param>
34-
/// <param name="batchInterval"></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="batchSizeLimit">The size of the batch prior to writing</param>
38-
/// <param name="renderTemplate">If true, the message template will be rendered</param>
39-
/// <returns>Logger configuration, allowing configuration to continue.</returns>
40-
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
41-
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
42-
public static LoggerConfiguration SplunkViaHttp(
43-
this LoggerSinkConfiguration loggerConfiguration,
44-
SplunkContext context,
45-
int batchSizeLimit,
46-
TimeSpan batchInterval,
47-
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
48-
IFormatProvider formatProvider = null,
49-
bool renderTemplate = true)
50-
{
51-
var sink = new SplunkViaHttpSink(context, batchSizeLimit, batchInterval, formatProvider, renderTemplate);
52-
53-
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
54-
}
55-
56-
/// <summary>
57-
/// Adds a sink that writes log events as to a Splunk instance via http.
58-
/// </summary>
59-
/// <param name="loggerConfiguration">The logger configuration.</param>
60-
/// <param name="context">The Splunk context to log to</param>
61-
/// <param name="password">The password of the Splunk user</param>
62-
/// <param name="resourceNameSpace"></param>
63-
/// <param name="transmitterArgs"></param>
64-
/// <param name="batchSizeLimit">The size of the batch prior to logging</param>
65-
/// <param name="batchInterval">The interval on which to log via http</param>
66-
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
67-
/// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param>
68-
/// <param name="index">The name of the Splunk index</param>
69-
/// <param name="userName">The name of the Splunk user</param>
70-
/// <param name="renderTemplate">If ture, the message template is rendered</param>
71-
/// <returns>Logger configuration, allowing configuration to continue.</returns>
72-
/// <exception cref="ArgumentNullException">A required parameter is null.</exception>
73-
/// <remarks>TODO: Add link to splunk configuration and wiki</remarks>
74-
public static LoggerConfiguration SplunkViaHttp(
75-
this LoggerSinkConfiguration loggerConfiguration,
76-
Splunk.Client.Context context,
77-
string index,
78-
string userName,
79-
string password,
80-
int batchSizeLimit,
81-
TimeSpan batchInterval,
82-
Namespace resourceNameSpace,
83-
TransmitterArgs transmitterArgs,
84-
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
85-
IFormatProvider formatProvider = null,
86-
bool renderTemplate = true)
87-
{
88-
var sink = new SplunkViaHttpSink(new SplunkContext(context, index, userName, password, resourceNameSpace, transmitterArgs), batchSizeLimit,batchInterval, formatProvider);
89-
90-
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
91-
}
92-
93-
/// <summary>
94-
/// Adds a sink that writes log events as to a Splunk instance via http.
30+
/// Adds a sink that writes log events as to a Splunk instance via UDP.
9531
/// </summary>
9632
/// <param name="loggerConfiguration">The logger config</param>
9733
/// <param name="host">The Splunk host that is configured for UDP logging</param>
@@ -109,7 +45,7 @@ public static LoggerConfiguration SplunkViaUdp(
10945
IFormatProvider formatProvider = null,
11046
bool renderTemplate = true)
11147
{
112-
var sink = new SplunkViaUdpSink(host, port, formatProvider, renderTemplate);
48+
var sink = new UdpSink(host, port, formatProvider, renderTemplate);
11349

11450
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
11551
}
@@ -134,7 +70,7 @@ public static LoggerConfiguration SplunkViaUdp(
13470
IFormatProvider formatProvider = null,
13571
bool renderTemplate = true)
13672
{
137-
var sink = new SplunkViaUdpSink(hostAddresss, port, formatProvider, renderTemplate);
73+
var sink = new UdpSink(hostAddresss, port, formatProvider, renderTemplate);
13874

13975
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
14076
}
@@ -158,7 +94,7 @@ public static LoggerConfiguration SplunkViaTcp(
15894
IFormatProvider formatProvider = null,
15995
bool renderTemplate = true)
16096
{
161-
var sink = new SplunkViaTcpSink(hostAddresss, port, formatProvider, renderTemplate);
97+
var sink = new TcpSink(hostAddresss, port, formatProvider, renderTemplate);
16298

16399
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
164100
}
@@ -182,7 +118,7 @@ public static LoggerConfiguration SplunkViaTcp(
182118
IFormatProvider formatProvider = null,
183119
bool renderTemplate = true)
184120
{
185-
var sink = new SplunkViaTcpSink(host, port, formatProvider, renderTemplate);
121+
var sink = new TcpSink(host, port, formatProvider, renderTemplate);
186122

187123
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
188124
}

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

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -40,44 +40,53 @@
4040
<AssemblyOriginatorKeyFile>..\..\assets\Serilog.snk</AssemblyOriginatorKeyFile>
4141
</PropertyGroup>
4242
<ItemGroup>
43+
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
44+
<HintPath>..\..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
45+
<Private>True</Private>
46+
</Reference>
4347
<Reference Include="Serilog, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
44-
<SpecificVersion>False</SpecificVersion>
45-
<HintPath>..\..\packages\Serilog.1.5.5\lib\net45\Serilog.dll</HintPath>
48+
<HintPath>..\..\packages\Serilog.1.5.11\lib\net45\Serilog.dll</HintPath>
49+
<Private>True</Private>
4650
</Reference>
4751
<Reference Include="Serilog.FullNetFx, Version=1.5.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL">
48-
<SpecificVersion>False</SpecificVersion>
49-
<HintPath>..\..\packages\Serilog.1.5.5\lib\net45\Serilog.FullNetFx.dll</HintPath>
50-
</Reference>
51-
<Reference Include="Splunk.Client, Version=2.1.2.0, Culture=neutral, processorArchitecture=MSIL">
52-
<SpecificVersion>False</SpecificVersion>
53-
<HintPath>..\..\packages\Splunk.Client.2.1.2\lib\portable-net45+win+wpa81\Splunk.Client.dll</HintPath>
52+
<HintPath>..\..\packages\Serilog.1.5.11\lib\net45\Serilog.FullNetFx.dll</HintPath>
53+
<Private>True</Private>
5454
</Reference>
55-
<Reference Include="Splunk.Logging.Common, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
56-
<SpecificVersion>False</SpecificVersion>
57-
<HintPath>..\..\packages\Splunk.Logging.Common.1.1.0\lib\net45\Splunk.Logging.Common.dll</HintPath>
55+
<Reference Include="Splunk.Logging.Common, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
56+
<HintPath>..\..\packages\Splunk.Logging.Common.1.5.0\lib\net45\Splunk.Logging.Common.dll</HintPath>
57+
<Private>True</Private>
5858
</Reference>
5959
<Reference Include="System" />
6060
<Reference Include="System.Core" />
6161
<Reference Include="Microsoft.CSharp" />
6262
<Reference Include="System.Net.Http" />
6363
</ItemGroup>
6464
<ItemGroup>
65-
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\SplunkContext.cs">
66-
<Link>Sinks\Splunk\SplunkContext.cs</Link>
65+
<Compile Include="..\Serilog.Sinks.Splunk\LoggerConfigurationSplunkPCLExtensions.cs">
66+
<Link>LoggerConfigurationSplunkPCLExtensions.cs</Link>
67+
</Compile>
68+
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\EventCollectorClient.cs">
69+
<Link>Sinks\Splunk\EventCollectorClient.cs</Link>
70+
</Compile>
71+
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\EventCollectorRequest.cs">
72+
<Link>Sinks\Splunk\EventCollectorRequest.cs</Link>
73+
</Compile>
74+
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\EventCollectorSink.cs">
75+
<Link>Sinks\Splunk\EventCollectorSink.cs</Link>
76+
</Compile>
77+
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\RepeatAction.cs">
78+
<Link>Sinks\Splunk\RepeatAction.cs</Link>
6779
</Compile>
6880
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\SplunkJsonFormatter.cs">
6981
<Link>Sinks\Splunk\SplunkJsonFormatter.cs</Link>
7082
</Compile>
71-
<Compile Include="..\Serilog.Sinks.Splunk\Sinks\Splunk\SplunkViaHttpSink.cs">
72-
<Link>Sinks\Splunk\SplunkViaHttpSink.cs</Link>
73-
</Compile>
7483
<Compile Include="Properties\AssemblyInfo.cs" />
7584
<Compile Include="..\..\assets\CommonAssemblyInfo.cs">
7685
<Link>Properties\CommonAssemblyInfo.cs</Link>
7786
</Compile>
7887
<Compile Include="LoggerConfigurationSplunkExtensions.cs" />
79-
<Compile Include="Sinks\Splunk\SplunkViaTcpSink.cs" />
80-
<Compile Include="Sinks\Splunk\SplunkViaUdpSink.cs" />
88+
<Compile Include="Sinks\Splunk\TcpSink.cs" />
89+
<Compile Include="Sinks\Splunk\UdpSink.cs" />
8190
</ItemGroup>
8291
<ItemGroup>
8392
<None Include="packages.config" />

0 commit comments

Comments
 (0)