Skip to content

Commit 9e1be47

Browse files
committed
Add a timeout on Dispose/Flush so we avoid infinitely hanging.
1 parent e510a8c commit 9e1be47

File tree

7 files changed

+154
-101
lines changed

7 files changed

+154
-101
lines changed

PingPonger/Program.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ public static int Main(string[] args)
6868
}
6969
if (options.TCP)
7070
{
71-
logConfig.WriteTo.TCPSink(options.Url, options.Port, new LogstashJsonFormatter());
71+
logConfig.WriteTo.TCPSink(options.Url, options.Port, null, null, new LogstashJsonFormatter());
7272
}
7373
}
7474
else if (options.IP.Length > 0)
@@ -86,7 +86,7 @@ public static int Main(string[] args)
8686
}
8787
if (options.TCP)
8888
{
89-
logConfig.WriteTo.TCPSink(ipAddress, options.Port, new LogstashJsonFormatter());
89+
logConfig.WriteTo.TCPSink(ipAddress, options.Port,null,null, new LogstashJsonFormatter());
9090
}
9191
}
9292
else

Serilog.Sinks.Network.Test/JsonFormatter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ private void ConfigureTestLogger(ITextFormatter formatter = null)
2121
_server.Start();
2222

2323
_logger = new LoggerConfiguration()
24-
.WriteTo.TCPSink(IPAddress.Loopback, port, formatter)
24+
.WriteTo.TCPSink(IPAddress.Loopback, port, null, null, formatter)
2525
.CreateLogger();
2626
}
2727

Serilog.Sinks.Network.Test/WhenLoggingViaTCP.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ private void ConfigureTestLogger(ITextFormatter formatter = null)
2222
_server.Start();
2323

2424
_logger = new LoggerConfiguration()
25-
.WriteTo.TCPSink(IPAddress.Loopback, port, formatter)
25+
.WriteTo.TCPSink(IPAddress.Loopback, port, null, null, formatter)
2626
.CreateLogger();
2727
}
2828

Serilog.Sinks.Network/NetworkLoggerConfigurationExtensions.cs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,39 @@ public static LoggerConfiguration TCPSink(
4141
this LoggerSinkConfiguration loggerConfiguration,
4242
IPAddress ipAddress,
4343
int port,
44+
int? writeTimeoutMs = null,
45+
int? disposeTimeoutMs = null,
4446
ITextFormatter textFormatter = null,
4547
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
4648
{
47-
var sink = new TCPSink(ipAddress, port, textFormatter ?? new LogstashJsonFormatter());
48-
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
49+
return TCPSink(loggerConfiguration, $"tcp://{ipAddress}:{port}", writeTimeoutMs, disposeTimeoutMs, textFormatter, restrictedToMinimumLevel);
4950
}
5051

5152
public static LoggerConfiguration TCPSink(
5253
this LoggerSinkConfiguration loggerConfiguration,
5354
string host,
5455
int port,
56+
int? writeTimeoutMs = null,
57+
int? disposeTimeoutMs = null,
5558
ITextFormatter textFormatter = null,
5659
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
5760
{
58-
return TCPSink(loggerConfiguration, $"{host}:{port}", textFormatter, restrictedToMinimumLevel);
61+
return TCPSink(loggerConfiguration, $"{host}:{port}", writeTimeoutMs, disposeTimeoutMs, textFormatter, restrictedToMinimumLevel);
5962
}
6063

6164
public static LoggerConfiguration TCPSink(
6265
this LoggerSinkConfiguration loggerConfiguration,
6366
string uri,
67+
int? writeTimeoutMs = null,
68+
int? disposeTimeoutMs = null,
6469
ITextFormatter textFormatter = null,
6570
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum)
6671
{
67-
var sink = new TCPSink(BuildUri(uri), textFormatter ?? new LogstashJsonFormatter());
72+
var socketWriter = new TcpSocketWriter(
73+
BuildUri(uri),
74+
writeTimeoutMs: writeTimeoutMs,
75+
disposeTimeoutMs: disposeTimeoutMs);
76+
var sink = new TCPSink(socketWriter, textFormatter ?? new LogstashJsonFormatter());
6877
return loggerConfiguration.Sink(sink, restrictedToMinimumLevel);
6978
}
7079

Serilog.Sinks.Network/Serilog.Sinks.Network.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
22
<Project Sdk="Microsoft.NET.Sdk">
33
<PropertyGroup>
4-
<TargetFramework>netstandard2.0</TargetFramework>
4+
<TargetFramework>net8.0</TargetFramework>
5+
<RootNamespace>Serilog.Sinks.Network</RootNamespace>
56
</PropertyGroup>
67

78
<PropertyGroup>

Serilog.Sinks.Network/Sinks/TCP/TCPSink.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,14 @@ public class TCPSink : ILogEventSink, IDisposable
1313
private readonly ITextFormatter _formatter;
1414
private readonly TcpSocketWriter _socketWriter;
1515

16-
public TCPSink(IPAddress ipAddress, int port, ITextFormatter formatter)
16+
public TCPSink(Uri uri, ITextFormatter formatter)
17+
: this(new TcpSocketWriter(uri), formatter)
1718
{
18-
_socketWriter = new TcpSocketWriter(new Uri($"tcp://{ipAddress}:{port}"));
19-
_formatter = formatter;
2019
}
2120

22-
public TCPSink(Uri uri, ITextFormatter formatter)
21+
public TCPSink(TcpSocketWriter socketWriter, ITextFormatter formatter)
2322
{
24-
_socketWriter = new TcpSocketWriter(uri);
23+
_socketWriter = socketWriter;
2524
_formatter = formatter;
2625
}
2726

0 commit comments

Comments
 (0)