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>
|
||||||
<Version>1.2.4</Version>
|
<Version>1.2.5</Version>
|
||||||
<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>
|
||||||
@@ -22,6 +22,18 @@
|
|||||||
<Title>EonaCat.Logger</Title>
|
<Title>EonaCat.Logger</Title>
|
||||||
<RepositoryType>git</RepositoryType>
|
<RepositoryType>git</RepositoryType>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<EVRevisionFormat>1.0.0.0+{chash:10}.{c:ymd}</EVRevisionFormat>
|
||||||
|
<EVDefault>true</EVDefault>
|
||||||
|
<EVInfo>true</EVInfo>
|
||||||
|
<EVTagMatch>v[0-9]*</EVTagMatch>
|
||||||
|
<EVRemoveTagV>true</EVRemoveTagV>
|
||||||
|
<EVVcs>git</EVVcs>
|
||||||
|
<EVCheckAllAttributes>true</EVCheckAllAttributes>
|
||||||
|
<EVShowRevision>true</EVShowRevision>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Remove="icon.png" />
|
<None Remove="icon.png" />
|
||||||
<None Include="..\LICENSE">
|
<None Include="..\LICENSE">
|
||||||
@@ -39,7 +51,11 @@
|
|||||||
</None>
|
</None>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="EonaCat.Json" Version="1.0.3" />
|
<PackageReference Include="EonaCat.Json" Version="1.0.5" />
|
||||||
|
<PackageReference Include="EonaCat.Versioning" Version="1.0.5">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.0" />
|
||||||
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
<PackageReference Include="Microsoft.Extensions.Logging" Version="8.0.0" />
|
||||||
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
<PackageReference Include="System.Net.Http" Version="4.3.4" />
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using System.Xml.Linq;
|
|
||||||
using EonaCat.Json;
|
using EonaCat.Json;
|
||||||
using EonaCat.Json.Linq;
|
|
||||||
using EonaCat.Logger.Extensions;
|
using EonaCat.Logger.Extensions;
|
||||||
using EonaCat.Logger.GrayLog;
|
using EonaCat.Logger.GrayLog;
|
||||||
using EonaCat.Logger.Splunk.Models;
|
using EonaCat.Logger.Splunk.Models;
|
||||||
@@ -35,36 +30,21 @@ namespace EonaCat.Logger.Managers
|
|||||||
if (string.IsNullOrWhiteSpace(currentMessage))
|
if (string.IsNullOrWhiteSpace(currentMessage))
|
||||||
return currentMessage;
|
return currentMessage;
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder(settings?.HeaderFormat ?? "[EonaCatLogger]");
|
||||||
|
|
||||||
sb.Append(settings?.HeaderFormat ?? "[EonaCatLogger]");
|
sb.Replace("{ts}", dateTime.ToString(settings?.TimestampFormat ?? "yyyy-MM-dd HH:mm:ss") + " " + (settings?.UseLocalTime ?? false ? "[LOCAL]" : "[UTC]"))
|
||||||
|
.Replace("{host}", $"[Host:{Dns.GetHostName()}]")
|
||||||
|
.Replace("{thread}", $"[ThreadId:{Environment.CurrentManagedThreadId}]")
|
||||||
|
.Replace("{sev}", $"[{logType}]");
|
||||||
|
|
||||||
if (settings != null)
|
if (!settings?.RemoveMessagePrefix ?? false && !currentMessage.Contains("[EonaCatLogger]"))
|
||||||
{
|
|
||||||
if (sb.ToString().Contains("{ts}"))
|
|
||||||
sb.Replace("{ts}", dateTime.ToString(settings.TimestampFormat) + " " + (settings.UseLocalTime ? "[LOCAL]" : "[UTC]"));
|
|
||||||
|
|
||||||
if (sb.ToString().Contains("{host}"))
|
|
||||||
sb.Replace("{host}", $"[Host:{Dns.GetHostName()}]");
|
|
||||||
|
|
||||||
if (sb.ToString().Contains("{thread}"))
|
|
||||||
sb.Replace("{thread}", $"[ThreadId:{Environment.CurrentManagedThreadId.ToString()}]");
|
|
||||||
|
|
||||||
if (sb.ToString().Contains("{sev}"))
|
|
||||||
sb.Replace("{sev}", $"[{logType.ToString()}]");
|
|
||||||
|
|
||||||
if (!settings.RemoveMessagePrefix && !currentMessage.Contains("[EonaCatLogger]"))
|
|
||||||
sb.Insert(0, "[EonaCatLogger] ");
|
sb.Insert(0, "[EonaCatLogger] ");
|
||||||
}
|
|
||||||
|
|
||||||
sb.Append(" ");
|
sb.Append(" ").Append(currentMessage);
|
||||||
sb.Append(currentMessage);
|
|
||||||
|
|
||||||
return sb.ToString();
|
return sb.ToString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
internal static void SendToConsole(LoggerSettings settings, ELogType logType, string message, bool writeToConsole)
|
internal static void SendToConsole(LoggerSettings settings, ELogType logType, string message, bool writeToConsole)
|
||||||
{
|
{
|
||||||
if (settings == null || !writeToConsole || string.IsNullOrWhiteSpace(message))
|
if (settings == null || !writeToConsole || string.IsNullOrWhiteSpace(message))
|
||||||
@@ -123,20 +103,15 @@ namespace EonaCat.Logger.Managers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static void SendToFile(ILogger logger, LoggerSettings settings, ELogType logType, string message)
|
internal static async Task SendToFile(ILogger logger, LoggerSettings settings, ELogType logType, string message)
|
||||||
{
|
{
|
||||||
if (logger == null || settings == null || !settings.EnableFileLogging || string.IsNullOrWhiteSpace(message))
|
if (logger == null || settings == null || !settings.EnableFileLogging || string.IsNullOrWhiteSpace(message))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
LogLevel logLevel = logType.ToLogLevel();
|
LogLevel logLevel = logType.ToLogLevel();
|
||||||
|
|
||||||
if (logLevel >= settings.MaxLogType.ToLogLevel()) // Filter out log levels
|
if (logLevel >= settings.MaxLogType.ToLogLevel())
|
||||||
Log(logger, logLevel, message);
|
await Task.Run(() => logger.Log(logLevel, message));
|
||||||
}
|
|
||||||
|
|
||||||
private static void Log(ILogger logger, LogLevel logLevel, string message)
|
|
||||||
{
|
|
||||||
logger.Log(logLevel, message);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static async Task SendToSplunkServersAsync(LoggerSettings settings, SplunkPayload splunkPayload, bool sendToSplunkServer)
|
public static async Task SendToSplunkServersAsync(LoggerSettings settings, SplunkPayload splunkPayload, bool sendToSplunkServer)
|
||||||
@@ -151,21 +126,12 @@ namespace EonaCat.Logger.Managers
|
|||||||
|
|
||||||
foreach (var splunkServer in settings.SplunkServers)
|
foreach (var splunkServer in settings.SplunkServers)
|
||||||
{
|
{
|
||||||
if (!splunkServer.HasHecUrl)
|
if (!splunkServer.HasHecUrl || !splunkServer.HasHecToken)
|
||||||
{
|
{
|
||||||
Console.WriteLine("Splunk server HecUrl not specified, skipping splunkServer");
|
OnException?.Invoke(null, new ErrorMessage { Message = $"Splunk server HecUrl or HecToken not specified, skipping splunkServer '{splunkServer.SplunkHecUrl}'" });
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!splunkServer.HasHecToken)
|
|
||||||
{
|
|
||||||
OnException?.Invoke(null, new ErrorMessage { Message = $"Splunk server HecToken not specified, skipping splunkServer '{splunkServer.SplunkHecUrl}'" });
|
|
||||||
Console.WriteLine($"Splunk server HecToken not specified, skipping splunkServer '{splunkServer.SplunkHecUrl}'");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
await Task.Run(async () =>
|
|
||||||
{
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var response = await splunkServer.SendAsync(splunkPayload);
|
var response = await splunkServer.SendAsync(splunkPayload);
|
||||||
@@ -179,7 +145,6 @@ namespace EonaCat.Logger.Managers
|
|||||||
{
|
{
|
||||||
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to Splunk Server '{splunkServer.SplunkHecUrl}': {exception.Message}" });
|
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to Splunk Server '{splunkServer.SplunkHecUrl}': {exception.Message}" });
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -203,14 +168,7 @@ namespace EonaCat.Logger.Managers
|
|||||||
if (settings == null || !sendToGrayLogServer || string.IsNullOrWhiteSpace(message))
|
if (settings == null || !sendToGrayLogServer || string.IsNullOrWhiteSpace(message))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (settings.GrayLogServers == null || !settings.GrayLogServers.Any())
|
foreach (var grayLogServer in settings.GrayLogServers ?? new List<GrayLogServer> { new GrayLogServer("127.0.0.1", 12201) })
|
||||||
{
|
|
||||||
settings.GrayLogServers = new List<GrayLogServer> { new GrayLogServer("127.0.0.1", 12201) };
|
|
||||||
}
|
|
||||||
|
|
||||||
foreach (var grayLogServer in settings.GrayLogServers)
|
|
||||||
{
|
|
||||||
await Task.Run(async () =>
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
@@ -232,7 +190,6 @@ namespace EonaCat.Logger.Managers
|
|||||||
{
|
{
|
||||||
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to GrayLog Server '{grayLogServer.Hostname}': {exception.Message}" });
|
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to GrayLog Server '{grayLogServer.Hostname}': {exception.Message}" });
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -241,38 +198,29 @@ namespace EonaCat.Logger.Managers
|
|||||||
if (settings == null || !sendToSyslogServers || string.IsNullOrWhiteSpace(message))
|
if (settings == null || !sendToSyslogServers || string.IsNullOrWhiteSpace(message))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (settings.SysLogServers == null || !settings.SysLogServers.Any())
|
foreach (var server in settings.SysLogServers ?? new List<SyslogServer> { new SyslogServer("127.0.0.1", 514) })
|
||||||
{
|
|
||||||
settings.SysLogServers = new List<SyslogServer> { new SyslogServer("127.0.0.1", 514) };
|
|
||||||
}
|
|
||||||
|
|
||||||
byte[] data = Encoding.UTF8.GetBytes(message);
|
|
||||||
|
|
||||||
foreach (SyslogServer server in settings.SysLogServers)
|
|
||||||
{
|
|
||||||
await Task.Run(() =>
|
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace(server.Hostname))
|
if (string.IsNullOrWhiteSpace(server.Hostname))
|
||||||
{
|
{
|
||||||
OnException?.Invoke(null, new ErrorMessage { Message = "Server hostname not specified, skipping SysLog Server" });
|
OnException?.Invoke(null, new ErrorMessage { Message = "Server hostname not specified, skipping SysLog Server" });
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (server.Port < 0)
|
if (server.Port < 0)
|
||||||
{
|
{
|
||||||
OnException?.Invoke(null, new ErrorMessage { Message = "Server port must be zero or greater, skipping SysLog Server" });
|
OnException?.Invoke(null, new ErrorMessage { Message = "Server port must be zero or greater, skipping SysLog Server" });
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
server.Udp.Send(data, data.Length);
|
byte[] data = Encoding.UTF8.GetBytes(message);
|
||||||
|
await server.Udp.SendAsync(data, data.Length, new IPEndPoint(IPAddress.Parse(server.Hostname), server.Port));
|
||||||
}
|
}
|
||||||
catch (Exception exception)
|
catch (Exception exception)
|
||||||
{
|
{
|
||||||
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to SysLog Server '{server.Hostname}': {exception.Message}" });
|
OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to SysLog Server '{server.Hostname}': {exception.Message}" });
|
||||||
}
|
}
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ using EonaCat.Logger.EonaCatCoreLogger;
|
|||||||
using EonaCat.Logger.EonaCatCoreLogger.Extensions;
|
using EonaCat.Logger.EonaCatCoreLogger.Extensions;
|
||||||
using EonaCat.Logger.EonaCatCoreLogger.Models;
|
using EonaCat.Logger.EonaCatCoreLogger.Models;
|
||||||
using EonaCat.Logger.Extensions;
|
using EonaCat.Logger.Extensions;
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace EonaCat.Logger.Managers
|
namespace EonaCat.Logger.Managers
|
||||||
{
|
{
|
||||||
@@ -65,10 +64,14 @@ namespace EonaCat.Logger.Managers
|
|||||||
public async Task StartNewLogAsync()
|
public async Task StartNewLogAsync()
|
||||||
{
|
{
|
||||||
if (_tokenSource.IsCancellationRequested)
|
if (_tokenSource.IsCancellationRequested)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (IsRunning && CurrentDateTme.Date > _logDate.Date)
|
if (IsRunning && CurrentDateTme.Date > _logDate.Date)
|
||||||
|
{
|
||||||
await StopLoggingAsync().ConfigureAwait(false);
|
await StopLoggingAsync().ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
IsRunning = true;
|
IsRunning = true;
|
||||||
|
|
||||||
@@ -103,45 +106,42 @@ namespace EonaCat.Logger.Managers
|
|||||||
Logger = LoggerFactory.CreateLogger(Settings.Id);
|
Logger = LoggerFactory.CreateLogger(Settings.Id);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InternalWriteAsync(DateTime dateTime, string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null, bool? sendToSyslogServers = null, bool? sendToSplunkServers = null, string customSplunkSourceType = null, bool? sendToGrayLogServers = null, string grayLogFacility = null, string grayLogSource = null, string grayLogVersion = "1.1")
|
private async Task InternalWriteAsync(DateTime dateTime, string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null, bool? sendToSyslogServers = null, bool? sendToSplunkServers = null, string customSplunkSourceType = null, bool? sendToGrayLogServers = null, string grayLogFacility = null, string grayLogSource = null, string grayLogVersion = "1.1")
|
||||||
{
|
{
|
||||||
if (string.IsNullOrEmpty(message) || logType == ELogType.NONE || (int)logType >= (int)Settings.MaxLogType)
|
if (string.IsNullOrEmpty(message) || logType == ELogType.NONE || (int)logType >= (int)Settings.MaxLogType)
|
||||||
|
{
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
var messageWithHeader = LogHelper.FormatMessageWithHeader(Settings, logType, message, dateTime);
|
string messageWithHeader = LogHelper.FormatMessageWithHeader(Settings, logType, message, dateTime);
|
||||||
|
bool writeToConsoleValue = writeToConsole ?? Settings.EnableConsole;
|
||||||
|
bool sendToSyslogServersValue = sendToSyslogServers ?? Settings.SendToSyslogServers;
|
||||||
|
bool sendToSplunkServersValue = sendToSplunkServers ?? Settings.SendToSplunkServers;
|
||||||
|
bool sendToGrayLogServersValue = sendToGrayLogServers ?? Settings.SendToGrayLogServers;
|
||||||
|
|
||||||
writeToConsole ??= Settings.EnableConsole;
|
if (writeToConsoleValue)
|
||||||
if (writeToConsole.Value)
|
|
||||||
{
|
{
|
||||||
LogHelper.SendToConsole(Settings, logType, messageWithHeader, true);
|
LogHelper.SendToConsole(Settings, logType, messageWithHeader, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
Task.Run(() => { LogHelper.SendToFile(Logger, Settings, logType, message); });
|
if (sendToSyslogServersValue || sendToSplunkServersValue || sendToGrayLogServersValue)
|
||||||
|
|
||||||
sendToSyslogServers ??= Settings.SendToSyslogServers;
|
|
||||||
if (sendToSyslogServers.Value)
|
|
||||||
{
|
{
|
||||||
Task.Run(async () =>
|
await Task.Run(async () =>
|
||||||
|
{
|
||||||
|
if (sendToSyslogServersValue)
|
||||||
{
|
{
|
||||||
await LogHelper.SendToSysLogServersAsync(Settings, messageWithHeader, true);
|
await LogHelper.SendToSysLogServersAsync(Settings, messageWithHeader, true);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToSplunkServers ??= Settings.SendToSplunkServers;
|
if (sendToSplunkServersValue)
|
||||||
if (sendToSplunkServers.Value)
|
|
||||||
{
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
{
|
||||||
await LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader, true);
|
await LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader, true);
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sendToGrayLogServers ??= Settings.SendToGrayLogServers;
|
if (sendToGrayLogServersValue)
|
||||||
if (sendToGrayLogServers.Value)
|
|
||||||
{
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
{
|
||||||
await LogHelper.SendToGrayLogServersAsync(Settings, messageWithHeader, logType, grayLogFacility, grayLogSource, true, grayLogVersion);
|
await LogHelper.SendToGrayLogServersAsync(Settings, messageWithHeader, logType, grayLogFacility, grayLogSource, true, grayLogVersion);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,7 +156,6 @@ namespace EonaCat.Logger.Managers
|
|||||||
Settings.OnLogEvent(logMessage);
|
Settings.OnLogEvent(logMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void Reset() => Settings.ResetLogEvent();
|
public void Reset() => Settings.ResetLogEvent();
|
||||||
|
|
||||||
public LogManager(LoggerSettings settings, string serverIp, int serverPort)
|
public LogManager(LoggerSettings settings, string serverIp, int serverPort)
|
||||||
@@ -221,10 +220,10 @@ namespace EonaCat.Logger.Managers
|
|||||||
Dispose();
|
Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task StopLoggingAsync()
|
private async Task<Task> StopLoggingAsync()
|
||||||
{
|
{
|
||||||
IsRunning = false;
|
IsRunning = false;
|
||||||
InternalWriteAsync(CurrentDateTme, $"{DllInfo.ApplicationName} stopped.");
|
await InternalWriteAsync(CurrentDateTme, $"{DllInfo.ApplicationName} stopped.").ConfigureAwait(false);
|
||||||
return Task.Delay(500);
|
return Task.Delay(500);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user