diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj
index f9d5a58..1af008a 100644
--- a/EonaCat.Logger/EonaCat.Logger.csproj
+++ b/EonaCat.Logger/EonaCat.Logger.csproj
@@ -3,7 +3,7 @@
.netstandard2.1; net6.0; net7.0; net8.0; net4.8;
icon.ico
latest
- 1.3.9
+ 1.4.0
EonaCat (Jeroen Saey)
true
EonaCat (Jeroen Saey)
@@ -24,7 +24,7 @@
- 1.3.9+{chash:10}.{c:ymd}
+ 1.4.0+{chash:10}.{c:ymd}
true
true
v[0-9]*
diff --git a/EonaCat.Logger/Managers/LogHelper.cs b/EonaCat.Logger/Managers/LogHelper.cs
index 146252f..ad2c12f 100644
--- a/EonaCat.Logger/Managers/LogHelper.cs
+++ b/EonaCat.Logger/Managers/LogHelper.cs
@@ -416,8 +416,6 @@ internal static class LogHelper
return;
}
- const int MaxUdpPacketSize = 4096;
-
var tasks = settings.SysLogServers?
.Where(server => !string.IsNullOrWhiteSpace(server.Hostname) && server.Port >= 0)
.Select(async server =>
@@ -444,24 +442,7 @@ internal static class LogHelper
{
server.SetUdp();
}
-
- var data = Encoding.UTF8.GetBytes(message);
-
- if (data.Length <= MaxUdpPacketSize)
- {
- // Send via UDP (single packet)
- await server.Udp.SendAsync(data, data.Length);
- }
- else if (server.SupportsTcp)
- {
- // Send via TCP if supported
- await SendViaTcpAsync(server, data);
- }
- else
- {
- // Chunk large messages for UDP
- await SendUdpInChunksAsync(server, data, MaxUdpPacketSize);
- }
+ await server.WriteAsync(message);
}
catch (Exception ex)
{
@@ -567,32 +548,6 @@ internal static class LogHelper
await Task.WhenAll(tasks);
}
-
- ///
- /// Sends a message via TCP to a syslog server.
- ///
- private static async Task SendViaTcpAsync(Servers.Syslog.Syslog server, byte[] data)
- {
- using var tcpClient = new System.Net.Sockets.TcpClient();
- await tcpClient.ConnectAsync(server.Hostname, server.Port);
- using var stream = tcpClient.GetStream();
- await stream.WriteAsync(data, 0, data.Length);
- await stream.FlushAsync();
- }
-
- ///
- /// Sends large messages in chunks over UDP.
- ///
- private static async Task SendUdpInChunksAsync(Servers.Syslog.Syslog server, byte[] data, int chunkSize)
- {
- for (int i = 0; i < data.Length; i += chunkSize)
- {
- var chunk = data.Skip(i).Take(chunkSize).ToArray();
- await server.Udp.SendAsync(chunk, chunk.Length);
- }
- }
-
-
internal static string GetStartupMessage()
{
return $"{DllInfo.ApplicationName} started.";
diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs
index e3d9eb4..6cf62da 100644
--- a/EonaCat.Logger/Managers/LogManager.cs
+++ b/EonaCat.Logger/Managers/LogManager.cs
@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
+using System.Text;
using System.Threading;
using System.Threading.Tasks;
using EonaCat.Logger.EonaCatCoreLogger;
diff --git a/EonaCat.Logger/Servers/Syslog/Syslog.cs b/EonaCat.Logger/Servers/Syslog/Syslog.cs
index 4092bda..fb5af25 100644
--- a/EonaCat.Logger/Servers/Syslog/Syslog.cs
+++ b/EonaCat.Logger/Servers/Syslog/Syslog.cs
@@ -1,6 +1,9 @@
using System;
using System.Collections.Generic;
+using System.Linq;
using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
namespace EonaCat.Logger.Servers.Syslog;
// This file is part of the EonaCat project(s) which is released under the Apache License.
@@ -11,6 +14,7 @@ namespace EonaCat.Logger.Servers.Syslog;
///
public class Syslog : IDisposable
{
+ const int MaxUdpPacketSize = 4096;
private string _Hostname = "127.0.0.1";
private int _Port = 514;
public bool IsConnected { get; private set; }
@@ -108,8 +112,62 @@ public class Syslog : IDisposable
{
DisposeUdp();
GC.SuppressFinalize(this);
- }
-
+ }
+
+ public async Task WriteAsync(string message)
+ {
+ var data = Encoding.UTF8.GetBytes(message);
+ await SendAsync(data);
+ }
+
+ public async Task WriteAsync(byte[] data)
+ {
+ await SendAsync(data);
+ }
+
+ private async Task SendAsync(byte[] data)
+ {
+ if (data.Length <= MaxUdpPacketSize)
+ {
+ // Send via UDP (single packet)
+ await Udp.SendAsync(data, data.Length);
+ }
+ else if (SupportsTcp)
+ {
+ // Send via TCP if supported
+ await SendViaTcpAsync(this, data);
+ }
+ else
+ {
+ // Chunk large messages for UDP
+ await SendUdpInChunksAsync(this, data, MaxUdpPacketSize);
+ }
+ }
+
+ ///
+ /// Sends a message via TCP to a syslog server.
+ ///
+ private static async Task SendViaTcpAsync(Servers.Syslog.Syslog server, byte[] data)
+ {
+ using var tcpClient = new System.Net.Sockets.TcpClient();
+ await tcpClient.ConnectAsync(server.Hostname, server.Port);
+ using var stream = tcpClient.GetStream();
+ await stream.WriteAsync(data, 0, data.Length);
+ await stream.FlushAsync();
+ }
+
+ ///
+ /// Sends large messages in chunks over UDP.
+ ///
+ private static async Task SendUdpInChunksAsync(Servers.Syslog.Syslog server, byte[] data, int chunkSize)
+ {
+ for (int i = 0; i < data.Length; i += chunkSize)
+ {
+ var chunk = data.Skip(i).Take(chunkSize).ToArray();
+ await server.Udp.SendAsync(chunk, chunk.Length);
+ }
+ }
+
~Syslog()
{
Dispose();
diff --git a/EonaCat.Logger/Servers/Tcp/Tcp.cs b/EonaCat.Logger/Servers/Tcp/Tcp.cs
index e632f07..ed1d47e 100644
--- a/EonaCat.Logger/Servers/Tcp/Tcp.cs
+++ b/EonaCat.Logger/Servers/Tcp/Tcp.cs
@@ -104,7 +104,7 @@ namespace EonaCat.Logger.Servers.Tcp
GC.SuppressFinalize(this);
}
- internal async Task WriteAsync(byte[] data)
+ public async Task WriteAsync(byte[] data)
{
if (_tcp == null)
{
@@ -129,7 +129,7 @@ namespace EonaCat.Logger.Servers.Tcp
}
}
- internal async Task WriteAsync(string data)
+ public async Task WriteAsync(string data)
{
if (_tcp == null)
{
diff --git a/EonaCat.Logger/Servers/Udp/Udp.cs b/EonaCat.Logger/Servers/Udp/Udp.cs
index 07eb72d..66ce754 100644
--- a/EonaCat.Logger/Servers/Udp/Udp.cs
+++ b/EonaCat.Logger/Servers/Udp/Udp.cs
@@ -103,7 +103,7 @@ namespace EonaCat.Logger.Servers.Udp
GC.SuppressFinalize(this);
}
- internal async Task WriteAsync(byte[] data, bool dontFragment = false)
+ public async Task WriteAsync(byte[] data, bool dontFragment = false)
{
if (_udp == null || data == null)
{
@@ -134,7 +134,7 @@ namespace EonaCat.Logger.Servers.Udp
}
}
- internal async Task WriteAsync(string data, bool dontFragment = false)
+ public async Task WriteAsync(string data, bool dontFragment = false)
{
if (_udp == null || string.IsNullOrEmpty(data))
{