diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj
index 48694de..463f851 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.2.4
+ 1.2.5
EonaCat (Jeroen Saey)
true
EonaCat (Jeroen Saey)
@@ -22,7 +22,19 @@
EonaCat.Logger
git
-
+
+
+ 1.0.0.0+{chash:10}.{c:ymd}
+ true
+ true
+ v[0-9]*
+ true
+ git
+ true
+ true
+
+
+
True
@@ -39,7 +51,11 @@
-
+
+
+ all
+ runtime; build; native; contentfiles; analyzers; buildtransitive
+
diff --git a/EonaCat.Logger/Managers/LogHelper.cs b/EonaCat.Logger/Managers/LogHelper.cs
index 1315c4f..6b191c2 100644
--- a/EonaCat.Logger/Managers/LogHelper.cs
+++ b/EonaCat.Logger/Managers/LogHelper.cs
@@ -1,14 +1,9 @@
using System;
using System.Collections.Generic;
-using System.Diagnostics;
-using System.Linq;
using System.Net;
-using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
-using System.Xml.Linq;
using EonaCat.Json;
-using EonaCat.Json.Linq;
using EonaCat.Logger.Extensions;
using EonaCat.Logger.GrayLog;
using EonaCat.Logger.Splunk.Models;
@@ -35,36 +30,21 @@ namespace EonaCat.Logger.Managers
if (string.IsNullOrWhiteSpace(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 (sb.ToString().Contains("{ts}"))
- sb.Replace("{ts}", dateTime.ToString(settings.TimestampFormat) + " " + (settings.UseLocalTime ? "[LOCAL]" : "[UTC]"));
+ if (!settings?.RemoveMessagePrefix ?? false && !currentMessage.Contains("[EonaCatLogger]"))
+ sb.Insert(0, "[EonaCatLogger] ");
- 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.Append(" ");
- sb.Append(currentMessage);
+ sb.Append(" ").Append(currentMessage);
return sb.ToString();
}
-
-
internal static void SendToConsole(LoggerSettings settings, ELogType logType, string message, bool writeToConsole)
{
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))
return;
LogLevel logLevel = logType.ToLogLevel();
- if (logLevel >= settings.MaxLogType.ToLogLevel()) // Filter out log levels
- Log(logger, logLevel, message);
- }
-
- private static void Log(ILogger logger, LogLevel logLevel, string message)
- {
- logger.Log(logLevel, message);
+ if (logLevel >= settings.MaxLogType.ToLogLevel())
+ await Task.Run(() => logger.Log(logLevel, message));
}
public static async Task SendToSplunkServersAsync(LoggerSettings settings, SplunkPayload splunkPayload, bool sendToSplunkServer)
@@ -151,35 +126,25 @@ namespace EonaCat.Logger.Managers
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;
}
- if (!splunkServer.HasHecToken)
+ try
{
- 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;
+ var response = await splunkServer.SendAsync(splunkPayload);
+
+ if (!response.IsSuccessStatusCode)
+ {
+ OnException?.Invoke(null, new ErrorMessage { Message = $"Failed to send log to Splunk '{splunkServer.SplunkHecUrl}'. Status code: {response.StatusCode}" });
+ }
}
-
- await Task.Run(async () =>
+ catch (Exception exception)
{
- try
- {
- var response = await splunkServer.SendAsync(splunkPayload);
-
- if (!response.IsSuccessStatusCode)
- {
- OnException?.Invoke(null, new ErrorMessage { Message = $"Failed to send log to Splunk '{splunkServer.SplunkHecUrl}'. Status code: {response.StatusCode}" });
- }
- }
- catch (Exception exception)
- {
- 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,36 +168,28 @@ namespace EonaCat.Logger.Managers
if (settings == null || !sendToGrayLogServer || string.IsNullOrWhiteSpace(message))
return;
- if (settings.GrayLogServers == null || !settings.GrayLogServers.Any())
+ foreach (var grayLogServer in settings.GrayLogServers ?? new List { new GrayLogServer("127.0.0.1", 12201) })
{
- settings.GrayLogServers = new List { new GrayLogServer("127.0.0.1", 12201) };
- }
-
- foreach (var grayLogServer in settings.GrayLogServers)
- {
- await Task.Run(async () =>
+ try
{
- try
+ var gelfMessage = new
{
- var gelfMessage = new
- {
- version,
- host = Environment.MachineName,
- short_message = message,
- level = logLevel.ToGrayLogLevel(),
- facility,
- source,
- timestamp = DateTime.UtcNow.ToUnixTimestamp(),
- };
+ version,
+ host = Environment.MachineName,
+ short_message = message,
+ level = logLevel.ToGrayLogLevel(),
+ facility,
+ source,
+ timestamp = DateTime.UtcNow.ToUnixTimestamp(),
+ };
- var messageBytes = Encoding.UTF8.GetBytes(JsonHelper.ToJson(gelfMessage));
- await grayLogServer.Udp.SendAsync(messageBytes, messageBytes.Length, new IPEndPoint(IPAddress.Parse(grayLogServer.Hostname), grayLogServer.Port));
- }
- catch (Exception exception)
- {
- OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to GrayLog Server '{grayLogServer.Hostname}': {exception.Message}" });
- }
- });
+ var messageBytes = Encoding.UTF8.GetBytes(JsonHelper.ToJson(gelfMessage));
+ await grayLogServer.Udp.SendAsync(messageBytes, messageBytes.Length, new IPEndPoint(IPAddress.Parse(grayLogServer.Hostname), grayLogServer.Port));
+ }
+ catch (Exception exception)
+ {
+ 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))
return;
- if (settings.SysLogServers == null || !settings.SysLogServers.Any())
+ foreach (var server in settings.SysLogServers ?? new List { new SyslogServer("127.0.0.1", 514) })
{
- settings.SysLogServers = new List { 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" });
- return;
- }
-
- if (server.Port < 0)
- {
- OnException?.Invoke(null, new ErrorMessage { Message = "Server port must be zero or greater, skipping SysLog Server" });
- return;
- }
-
- server.Udp.Send(data, data.Length);
+ OnException?.Invoke(null, new ErrorMessage { Message = "Server hostname not specified, skipping SysLog Server" });
+ continue;
}
- catch (Exception exception)
+
+ if (server.Port < 0)
{
- OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to SysLog Server '{server.Hostname}': {exception.Message}" });
+ OnException?.Invoke(null, new ErrorMessage { Message = "Server port must be zero or greater, skipping SysLog Server" });
+ continue;
}
- });
+
+ byte[] data = Encoding.UTF8.GetBytes(message);
+ await server.Udp.SendAsync(data, data.Length, new IPEndPoint(IPAddress.Parse(server.Hostname), server.Port));
+ }
+ catch (Exception exception)
+ {
+ OnException?.Invoke(null, new ErrorMessage { Exception = exception, Message = $"Error while logging to SysLog Server '{server.Hostname}': {exception.Message}" });
+ }
}
}
}
diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs
index 45b843e..4d93b04 100644
--- a/EonaCat.Logger/Managers/LogManager.cs
+++ b/EonaCat.Logger/Managers/LogManager.cs
@@ -10,7 +10,6 @@ using EonaCat.Logger.EonaCatCoreLogger;
using EonaCat.Logger.EonaCatCoreLogger.Extensions;
using EonaCat.Logger.EonaCatCoreLogger.Models;
using EonaCat.Logger.Extensions;
-using System.Text;
namespace EonaCat.Logger.Managers
{
@@ -65,10 +64,14 @@ namespace EonaCat.Logger.Managers
public async Task StartNewLogAsync()
{
if (_tokenSource.IsCancellationRequested)
+ {
return;
+ }
if (IsRunning && CurrentDateTme.Date > _logDate.Date)
+ {
await StopLoggingAsync().ConfigureAwait(false);
+ }
IsRunning = true;
@@ -103,45 +106,42 @@ namespace EonaCat.Logger.Managers
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)
+ {
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 (writeToConsole.Value)
+ if (writeToConsoleValue)
{
LogHelper.SendToConsole(Settings, logType, messageWithHeader, true);
}
- Task.Run(() => { LogHelper.SendToFile(Logger, Settings, logType, message); });
-
- sendToSyslogServers ??= Settings.SendToSyslogServers;
- if (sendToSyslogServers.Value)
+ if (sendToSyslogServersValue || sendToSplunkServersValue || sendToGrayLogServersValue)
{
- Task.Run(async () =>
+ await Task.Run(async () =>
{
- await LogHelper.SendToSysLogServersAsync(Settings, messageWithHeader, true);
- });
- }
+ if (sendToSyslogServersValue)
+ {
+ await LogHelper.SendToSysLogServersAsync(Settings, messageWithHeader, true);
+ }
- sendToSplunkServers ??= Settings.SendToSplunkServers;
- if (sendToSplunkServers.Value)
- {
- Task.Run(async () =>
- {
- await LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader, true);
- });
- }
+ if (sendToSplunkServersValue)
+ {
+ await LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader, true);
+ }
- sendToGrayLogServers ??= Settings.SendToGrayLogServers;
- if (sendToGrayLogServers.Value)
- {
- Task.Run(async () =>
- {
- await LogHelper.SendToGrayLogServersAsync(Settings, messageWithHeader, logType, grayLogFacility, grayLogSource, true, grayLogVersion);
+ if (sendToGrayLogServersValue)
+ {
+ await LogHelper.SendToGrayLogServersAsync(Settings, messageWithHeader, logType, grayLogFacility, grayLogSource, true, grayLogVersion);
+ }
});
}
@@ -155,9 +155,8 @@ namespace EonaCat.Logger.Managers
Settings.OnLogEvent(logMessage);
}
-
- public void Reset() => Settings.ResetLogEvent();
+ public void Reset() => Settings.ResetLogEvent();
public LogManager(LoggerSettings settings, string serverIp, int serverPort)
{
@@ -221,10 +220,10 @@ namespace EonaCat.Logger.Managers
Dispose();
}
- private Task StopLoggingAsync()
+ private async Task StopLoggingAsync()
{
IsRunning = false;
- InternalWriteAsync(CurrentDateTme, $"{DllInfo.ApplicationName} stopped.");
+ await InternalWriteAsync(CurrentDateTme, $"{DllInfo.ApplicationName} stopped.").ConfigureAwait(false);
return Task.Delay(500);
}