Updated
This commit is contained in:
@@ -3,7 +3,7 @@
|
|||||||
<TargetFrameworks>.netstandard2.1; net6.0; net7.0; net8.0; net4.8;</TargetFrameworks>
|
<TargetFrameworks>.netstandard2.1; net6.0; net7.0; net8.0; net4.8;</TargetFrameworks>
|
||||||
<ApplicationIcon>icon.ico</ApplicationIcon>
|
<ApplicationIcon>icon.ico</ApplicationIcon>
|
||||||
<LangVersion>latest</LangVersion>
|
<LangVersion>latest</LangVersion>
|
||||||
<FileVersion>1.3.9</FileVersion>
|
<FileVersion>1.4.0</FileVersion>
|
||||||
<Authors>EonaCat (Jeroen Saey)</Authors>
|
<Authors>EonaCat (Jeroen Saey)</Authors>
|
||||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
<Company>EonaCat (Jeroen Saey)</Company>
|
<Company>EonaCat (Jeroen Saey)</Company>
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<EVRevisionFormat>1.3.9+{chash:10}.{c:ymd}</EVRevisionFormat>
|
<EVRevisionFormat>1.4.0+{chash:10}.{c:ymd}</EVRevisionFormat>
|
||||||
<EVDefault>true</EVDefault>
|
<EVDefault>true</EVDefault>
|
||||||
<EVInfo>true</EVInfo>
|
<EVInfo>true</EVInfo>
|
||||||
<EVTagMatch>v[0-9]*</EVTagMatch>
|
<EVTagMatch>v[0-9]*</EVTagMatch>
|
||||||
|
|||||||
@@ -416,8 +416,6 @@ internal static class LogHelper
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const int MaxUdpPacketSize = 4096;
|
|
||||||
|
|
||||||
var tasks = settings.SysLogServers?
|
var tasks = settings.SysLogServers?
|
||||||
.Where(server => !string.IsNullOrWhiteSpace(server.Hostname) && server.Port >= 0)
|
.Where(server => !string.IsNullOrWhiteSpace(server.Hostname) && server.Port >= 0)
|
||||||
.Select(async server =>
|
.Select(async server =>
|
||||||
@@ -444,24 +442,7 @@ internal static class LogHelper
|
|||||||
{
|
{
|
||||||
server.SetUdp();
|
server.SetUdp();
|
||||||
}
|
}
|
||||||
|
await server.WriteAsync(message);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
@@ -567,32 +548,6 @@ internal static class LogHelper
|
|||||||
|
|
||||||
await Task.WhenAll(tasks);
|
await Task.WhenAll(tasks);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sends a message via TCP to a syslog server.
|
|
||||||
/// </summary>
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sends large messages in chunks over UDP.
|
|
||||||
/// </summary>
|
|
||||||
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()
|
internal static string GetStartupMessage()
|
||||||
{
|
{
|
||||||
return $"{DllInfo.ApplicationName} started.";
|
return $"{DllInfo.ApplicationName} started.";
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
|||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using EonaCat.Logger.EonaCatCoreLogger;
|
using EonaCat.Logger.EonaCatCoreLogger;
|
||||||
|
|||||||
@@ -1,6 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
|
using System.Text;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace EonaCat.Logger.Servers.Syslog;
|
namespace EonaCat.Logger.Servers.Syslog;
|
||||||
// This file is part of the EonaCat project(s) which is released under the Apache License.
|
// 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;
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class Syslog : IDisposable
|
public class Syslog : IDisposable
|
||||||
{
|
{
|
||||||
|
const int MaxUdpPacketSize = 4096;
|
||||||
private string _Hostname = "127.0.0.1";
|
private string _Hostname = "127.0.0.1";
|
||||||
private int _Port = 514;
|
private int _Port = 514;
|
||||||
public bool IsConnected { get; private set; }
|
public bool IsConnected { get; private set; }
|
||||||
@@ -110,6 +114,60 @@ public class Syslog : IDisposable
|
|||||||
GC.SuppressFinalize(this);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends a message via TCP to a syslog server.
|
||||||
|
/// </summary>
|
||||||
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends large messages in chunks over UDP.
|
||||||
|
/// </summary>
|
||||||
|
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()
|
~Syslog()
|
||||||
{
|
{
|
||||||
Dispose();
|
Dispose();
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ namespace EonaCat.Logger.Servers.Tcp
|
|||||||
GC.SuppressFinalize(this);
|
GC.SuppressFinalize(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
internal async Task WriteAsync(byte[] data)
|
public async Task WriteAsync(byte[] data)
|
||||||
{
|
{
|
||||||
if (_tcp == null)
|
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)
|
if (_tcp == null)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ namespace EonaCat.Logger.Servers.Udp
|
|||||||
GC.SuppressFinalize(this);
|
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)
|
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))
|
if (_udp == null || string.IsNullOrEmpty(data))
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user