diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj
index 5bfcd86..da005ff 100644
--- a/EonaCat.Logger/EonaCat.Logger.csproj
+++ b/EonaCat.Logger/EonaCat.Logger.csproj
@@ -2,9 +2,7 @@
.netstandard2.1; net8.0; net4.8;
icon.ico
- 1.5.0
latest
- 1.5.0
EonaCat (Jeroen Saey)
true
EonaCat (Jeroen Saey)
@@ -25,7 +23,7 @@
- 1.5.0+{chash:10}.{c:ymd}
+ 1.5.2+{chash:10}.{c:ymd}
true
true
v[0-9]*
@@ -35,6 +33,17 @@
true
+
+ $(GeneratedVersion)
+
+
+
+
+
+ $(GeneratedVersion)
+
+
+
diff --git a/EonaCat.Logger/EonaCatCoreLogger/DatabaseLogger.cs b/EonaCat.Logger/EonaCatCoreLogger/DatabaseLogger.cs
index 8f61b0e..648fb48 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/DatabaseLogger.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/DatabaseLogger.cs
@@ -48,7 +48,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
Exception exception, Func formatter)
{
if (!IsEnabled(logLevel) || formatter == null)
+ {
return;
+ }
if (IncludeCorrelationId)
{
@@ -88,7 +90,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
private async Task FlushBufferAsync()
{
if (!await _flushLock.WaitAsync(0))
+ {
return; // Another flush is in progress
+ }
try
{
@@ -98,7 +102,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
{
using var connection = _options.DbProviderFactory.CreateConnection();
if (connection == null)
+ {
throw new InvalidOperationException("Failed to create database connection.");
+ }
connection.ConnectionString = _options.ConnectionString;
await connection.OpenAsync();
diff --git a/EonaCat.Logger/EonaCatCoreLogger/DiscordLogger.cs b/EonaCat.Logger/EonaCatCoreLogger/DiscordLogger.cs
index 619e904..fb2872e 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/DiscordLogger.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/DiscordLogger.cs
@@ -52,7 +52,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
Exception exception, Func formatter)
{
if (!IsEnabled(logLevel) || formatter == null)
+ {
return;
+ }
if (IncludeCorrelationId)
{
@@ -98,7 +100,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
private async Task FlushBufferAsync()
{
if (!await _flushLock.WaitAsync(0))
+ {
return; // Already flushing
+ }
try
{
diff --git a/EonaCat.Logger/EonaCatCoreLogger/TcpLogger.cs b/EonaCat.Logger/EonaCatCoreLogger/TcpLogger.cs
index d26d2e3..e83f4bd 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/TcpLogger.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/TcpLogger.cs
@@ -41,7 +41,10 @@ namespace EonaCat.Logger.EonaCatCoreLogger
public void Log(LogLevel logLevel, EventId eventId, TState state,
Exception exception, Func formatter)
{
- if (!IsEnabled(logLevel)) return;
+ if (!IsEnabled(logLevel))
+ {
+ return;
+ }
try
{
diff --git a/EonaCat.Logger/EonaCatCoreLogger/XmlFileLogger.cs b/EonaCat.Logger/EonaCatCoreLogger/XmlFileLogger.cs
index 27018d9..7729630 100644
--- a/EonaCat.Logger/EonaCatCoreLogger/XmlFileLogger.cs
+++ b/EonaCat.Logger/EonaCatCoreLogger/XmlFileLogger.cs
@@ -48,7 +48,9 @@ namespace EonaCat.Logger.EonaCatCoreLogger
Exception exception, Func formatter)
{
if (!IsEnabled(logLevel) || formatter == null)
+ {
return;
+ }
try
{
diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs
index add5f5a..4582e2b 100644
--- a/EonaCat.Logger/Managers/LogManager.cs
+++ b/EonaCat.Logger/Managers/LogManager.cs
@@ -19,81 +19,63 @@ using Microsoft.Extensions.Logging;
namespace EonaCat.Logger.Managers
{
- // This file is part of the EonaCat project(s) which is released under the Apache License.
- // See the LICENSE file or go to https://EonaCat.com/License for full license details.
-
public class LogManager : ILogManager, IDisposable
{
private static readonly Lazy _instance = new(() => new LogManager(CreateDefaultSettings()));
- private readonly CancellationTokenSource _tokenSource = new();
+ private CancellationTokenSource _tokenSource = new();
private DateTime _logDate;
private bool _isDisposing;
private string _category;
public LogManager(LoggerSettings settings)
{
- Settings = settings;
+ Settings = settings ?? CreateDefaultSettings();
SetupLogManager();
}
- public LogManager(LoggerSettings settings, string category = null)
+ public LogManager(LoggerSettings settings, string category = null) : this(settings)
{
- _category = category;
- if (string.IsNullOrWhiteSpace(category))
- {
- _category = "General";
- }
- Settings = settings;
+ _category = string.IsNullOrWhiteSpace(category) ? "General" : category;
SetupFileLogger(settings);
- SetupLogManager();
+
+ // Subscribe to static events
LogHelper.OnException += LogHelper_OnException;
LogHelper.OnLogLevelDisabled += LogHelper_OnLogLevelDisabled;
}
- private void LogHelper_OnLogLevelDisabled(object sender, ErrorMessage e)
- {
- OnLogLevelDisabled?.Invoke(sender, e);
- }
+ public static LogManager Instance => _instance.Value;
- private DateTime CurrentDateTime => Settings.UseLocalTime ? DateTime.Now : DateTime.UtcNow;
+ public LoggerSettings Settings { get; private set; }
public ILoggerProvider LoggerProvider { get; private set; }
public ILoggerFactory LoggerFactory { get; private set; }
public ILogger Logger { get; private set; }
+ public bool IsRunning { get; private set; }
public string CurrentLogFile => LoggerProvider is FileLoggerProvider fileLoggerProvider
? fileLoggerProvider.LogFile
: string.Empty;
- public bool IsRunning { get; private set; }
-
- public static LogManager Instance => _instance.Value;
-
- public LoggerSettings Settings { get; set; } = CreateDefaultSettings();
-
- public void Dispose()
- {
- DisposeAsync(true).GetAwaiter().GetResult();
- GC.SuppressFinalize(this);
- }
+ private DateTime CurrentDateTime => Settings.UseLocalTime ? DateTime.Now : DateTime.UtcNow;
+ public event EventHandler OnException;
+ public event EventHandler OnLogLevelDisabled;
public async Task WriteAsync(object currentObject, ELogType logType = ELogType.INFO, bool? writeToConsole = null,
- string customSplunkSourceType = null,
- string grayLogFacility = null, string grayLogSource = null,
- string grayLogVersion = "1.1", bool disableSplunkSSL = false, DumpFormat dumpFormat = DumpFormat.Json, bool isDetailedDump = false, int? dumpDepth = null, int? maxCollectionItems = null)
+ string customSplunkSourceType = null, string grayLogFacility = null,
+ string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false,
+ DumpFormat dumpFormat = DumpFormat.Json, bool isDetailedDump = false, int? dumpDepth = null, int? maxCollectionItems = null)
{
if (currentObject == null)
{
return;
}
- await WriteAsync(currentObject.Dump(dumpFormat, isDetailedDump, dumpDepth, maxCollectionItems), logType, writeToConsole,
- customSplunkSourceType, grayLogFacility, grayLogSource,
- grayLogVersion, disableSplunkSSL);
+ await WriteAsync(currentObject.Dump(dumpFormat, isDetailedDump, dumpDepth, maxCollectionItems),
+ logType, writeToConsole, customSplunkSourceType, grayLogFacility, grayLogSource, grayLogVersion, disableSplunkSSL);
}
public async Task WriteAsync(Exception exception, string module = null, string method = null,
- bool criticalException = false,
- bool? writeToConsole = null, string customSplunkSourceType = null, string grayLogFacility = null,
+ bool criticalException = false, bool? writeToConsole = null,
+ string customSplunkSourceType = null, string grayLogFacility = null,
string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (exception == null)
@@ -102,14 +84,12 @@ namespace EonaCat.Logger.Managers
}
await WriteAsync(exception.FormatExceptionToMessage(module, method),
- criticalException ? ELogType.CRITICAL : ELogType.ERROR, writeToConsole,
- customSplunkSourceType, grayLogFacility, grayLogSource,
- grayLogVersion, disableSplunkSSL = false);
+ criticalException ? ELogType.CRITICAL : ELogType.ERROR,
+ writeToConsole, customSplunkSourceType, grayLogFacility, grayLogSource, grayLogVersion, disableSplunkSSL);
}
public async Task WriteAsync(string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null,
- string customSplunkSourceType = null,
- string grayLogFacility = null, string grayLogSource = null,
+ string customSplunkSourceType = null, string grayLogFacility = null, string grayLogSource = null,
string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (logType == ELogType.NONE)
@@ -117,39 +97,10 @@ namespace EonaCat.Logger.Managers
return;
}
- await InternalWriteAsync(CurrentDateTime, message, logType, writeToConsole,
+ await InternalWriteAsync(CurrentDateTime, message, logType, writeToConsole,
customSplunkSourceType, grayLogFacility, grayLogSource, grayLogVersion, disableSplunkSSL);
}
- ///
- /// Gets fired when an exception occurs during logging
- ///
- public event EventHandler OnException;
-
- ///
- /// Gets fired when the log level is disabled and the user tries to log a message
- ///
- public event EventHandler OnLogLevelDisabled;
-
- private static LoggerSettings CreateDefaultSettings()
- {
- var settings = new LoggerSettings
- {
- Id = DllInfo.ApplicationName,
- };
- return settings;
- }
-
- protected virtual async Task DisposeAsync(bool disposing)
- {
- if (disposing)
- {
- _isDisposing = true;
- await StopLoggingAsync();
- await Task.Delay(100);
- }
- }
-
public async Task StartNewLogAsync()
{
if (_tokenSource.IsCancellationRequested)
@@ -163,57 +114,73 @@ namespace EonaCat.Logger.Managers
}
IsRunning = true;
-
CreateLogger();
-
Directory.CreateDirectory(Settings.FileLoggerOptions.LogDirectory);
-
_logDate = CurrentDateTime;
}
+ private async Task StopLoggingAsync()
+ {
+ WriteStopMessage();
+ IsRunning = false;
+ await Task.CompletedTask;
+ }
+
+ private void WriteStopMessage()
+ {
+ var stopMessage = $"{DllInfo.ApplicationName} stopped.{Environment.NewLine}";
+ LogHelper.SendToFile(Logger, Settings, ELogType.INFO, stopMessage);
+ }
+
private void CreateLogger()
{
- // Dispose of previous ServiceProvider if it exists
+ // Dispose previous providers safely
LoggerProvider?.Dispose();
LoggerFactory?.Dispose();
IServiceCollection serviceCollection = new ServiceCollection();
- if (Settings.TypesToLog == null)
+ if (Settings.TypesToLog == null || !Settings.TypesToLog.Any())
{
- Settings.TypesToLog = new List { ELogType.INFO, ELogType.WARNING, ELogType.ERROR, ELogType.TRAFFIC, ELogType.DEBUG, ELogType.CRITICAL, ELogType.TRACE };
+ Settings.TypesToLog = new List
+ {
+ ELogType.INFO, ELogType.WARNING, ELogType.ERROR,
+ ELogType.TRAFFIC, ELogType.DEBUG, ELogType.CRITICAL, ELogType.TRACE
+ };
}
- serviceCollection.AddLogging(builder => builder.SetMinimumLevel(Settings.TypesToLog.Max().ToLogLevel())
- .AddEonaCatFileLogger(configuration =>
- {
- var fileLoggerOptions = Settings.FileLoggerOptions;
- configuration.MaxWriteTries = fileLoggerOptions.MaxWriteTries;
- configuration.RetainedFileCountLimit = fileLoggerOptions.RetainedFileCountLimit;
- configuration.FlushPeriod = fileLoggerOptions.FlushPeriod;
- configuration.IsEnabled = fileLoggerOptions.IsEnabled;
- configuration.BatchSize = fileLoggerOptions.BatchSize;
- configuration.FileSizeLimit = fileLoggerOptions.FileSizeLimit;
- configuration.LogDirectory = fileLoggerOptions.LogDirectory;
- configuration.FileNamePrefix = fileLoggerOptions.FileNamePrefix;
- configuration.MaxRolloverFiles = fileLoggerOptions.MaxRolloverFiles;
- configuration.UseLocalTime = Settings.UseLocalTime;
- configuration.UseMask = Settings.UseMask;
- configuration.Mask = fileLoggerOptions.Mask;
- configuration.UseDefaultMasking = Settings.UseDefaultMasking;
- configuration.MaskedKeywords = fileLoggerOptions.MaskedKeywords;
- }));
+ serviceCollection.AddLogging(builder =>
+ builder.SetMinimumLevel(Settings.TypesToLog.Max().ToLogLevel())
+ .AddEonaCatFileLogger(config =>
+ {
+ var options = Settings.FileLoggerOptions;
+ config.MaxWriteTries = options.MaxWriteTries;
+ config.RetainedFileCountLimit = options.RetainedFileCountLimit;
+ config.FlushPeriod = options.FlushPeriod;
+ config.IsEnabled = options.IsEnabled;
+ config.BatchSize = options.BatchSize;
+ config.FileSizeLimit = options.FileSizeLimit;
+ config.LogDirectory = options.LogDirectory;
+ config.FileNamePrefix = options.FileNamePrefix;
+ config.MaxRolloverFiles = options.MaxRolloverFiles;
+ config.UseLocalTime = Settings.UseLocalTime;
+ config.UseMask = Settings.UseMask;
+ config.Mask = options.Mask;
+ config.UseDefaultMasking = Settings.UseDefaultMasking;
+ config.MaskedKeywords = options.MaskedKeywords;
+ }));
var serviceProvider = serviceCollection.BuildServiceProvider();
LoggerProvider = serviceProvider.GetService();
LoggerFactory = serviceProvider.GetService();
Logger = LoggerFactory.CreateLogger(Settings.Id);
+
LogHelper.SendToFile(Logger, Settings, ELogType.INFO, LogHelper.GetStartupMessage());
}
private async Task InternalWriteAsync(DateTime dateTime, string message, ELogType logType = ELogType.INFO,
- bool? writeToConsole = null, string customSplunkSourceType = null, string grayLogFacility = null,
- string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false)
+ bool? writeToConsole = null, string customSplunkSourceType = null, string grayLogFacility = null,
+ string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (string.IsNullOrWhiteSpace(message) || logType == ELogType.NONE || !IsLogLevelEnabled(logType) || _isDisposing)
{
@@ -235,29 +202,32 @@ namespace EonaCat.Logger.Managers
LogHelper.SendToConsole(Settings, logType, messageWithHeader);
}
- var tasks = new List(5)
+ var tasks = new List
{
LogHelper.SendToSysLogServersAsync(Settings, message, logType, dateTime, _category),
LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader, disableSplunkSSL),
LogHelper.SendToGrayLogServersAsync(Settings, messageWithHeader, logType, grayLogFacility, grayLogSource, grayLogVersion),
LogHelper.SendToTcpLogServersAsync(Settings, messageWithHeader, logType),
- LogHelper.SendToUdpLogServersAsync(Settings, messageWithHeader, logType),
+ LogHelper.SendToUdpLogServersAsync(Settings, messageWithHeader, logType)
};
- if (tasks.Count > 0)
+ try
{
await Task.WhenAll(tasks).ConfigureAwait(false);
}
+ catch (Exception ex)
+ {
+ OnException?.Invoke(this, new ErrorMessage { Message = ex.Message, Exception = ex });
+ }
- var logMessage = new EonaCatLogMessage
+ Settings.OnLogEvent(new EonaCatLogMessage
{
DateTime = dateTime,
Message = message,
LogType = logType,
Origin = string.IsNullOrEmpty(Settings.LogOrigin) ? "LogManager" : Settings.LogOrigin,
- Category = _category,
- };
- Settings.OnLogEvent(logMessage);
+ Category = _category
+ });
}
private bool IsLogLevelEnabled(ELogType logType)
@@ -268,42 +238,74 @@ namespace EonaCat.Logger.Managers
return false;
}
- if (logType == ELogType.NONE)
+ return logType != ELogType.NONE &&
+ (Settings.TypesToLog == null || !Settings.TypesToLog.Any() || Settings.TypesToLog.Contains(logType));
+ }
+
+ private void LogHelper_OnException(object sender, ErrorMessage e) => OnException?.Invoke(sender, e);
+ private void LogHelper_OnLogLevelDisabled(object sender, ErrorMessage e) => OnLogLevelDisabled?.Invoke(sender, e);
+ public void Dispose()
+ {
+ DisposeAsync(true).GetAwaiter().GetResult();
+ GC.SuppressFinalize(this);
+ }
+
+ protected virtual async Task DisposeAsync(bool disposing)
+ {
+ if (_isDisposing)
{
- return false;
+ return;
}
- var isEnabled = (Settings.TypesToLog == null || Settings.TypesToLog.Count == 0 || Settings.TypesToLog.Contains(logType));
- if (!isEnabled)
+ if (disposing)
{
- return false;
+ _isDisposing = true;
+
+ await StopLoggingAsync();
+
+ // Unsubscribe events
+ LogHelper.OnException -= LogHelper_OnException;
+ LogHelper.OnLogLevelDisabled -= LogHelper_OnLogLevelDisabled;
+
+ // Cancel token
+ _tokenSource.Cancel();
+ _tokenSource.Dispose();
+ _tokenSource = null;
+
+ LoggerProvider?.Dispose();
+ LoggerFactory?.Dispose();
+
+ await Task.Delay(50);
}
- return true;
}
- public void Reset()
+ public static void Shutdown()
{
- Settings.ResetLogEvent();
+ if (_instance.IsValueCreated)
+ {
+ _instance.Value.Dispose();
+ }
+ }
+ public void DeleteCurrentLogFile()
+ {
+ if (!string.IsNullOrEmpty(CurrentLogFile) && File.Exists(CurrentLogFile))
+ {
+ File.Delete(CurrentLogFile);
+ }
}
- private void LogHelper_OnException(object sender, ErrorMessage e)
- {
- OnException?.Invoke(sender, e);
- }
+ private static LoggerSettings CreateDefaultSettings() => new() { Id = DllInfo.ApplicationName };
private void SetupFileLogger(LoggerSettings settings = null, string logFolder = null, bool defaultPrefix = true)
{
- if (settings == null)
- {
- settings = Settings;
- }
+ settings ??= Settings;
if (!settings.EnableFileLogging)
{
return;
}
- if (logFolder != null)
+ if (!string.IsNullOrWhiteSpace(logFolder))
{
settings.FileLoggerOptions.LogDirectory = logFolder;
}
@@ -314,50 +316,14 @@ namespace EonaCat.Logger.Managers
}
}
- private void SetupLogManager()
- {
- _logDate = CurrentDateTime;
- }
+ private void SetupLogManager() => _logDate = CurrentDateTime;
- private Task StopLoggingAsync()
- {
- WriteStopMessage();
- IsRunning = false;
- return Task.CompletedTask;
- }
-
- private void WriteStopMessage()
- {
- var stopMessage = $"{DllInfo.ApplicationName} stopped.{Environment.NewLine}";
- LogHelper.SendToFile(Logger, Settings, ELogType.INFO, stopMessage);
- }
-
- public void DeleteCurrentLogFile()
- {
- if (!string.IsNullOrEmpty(CurrentLogFile))
- {
- File.Delete(CurrentLogFile);
- }
- }
-
- ///
- /// Add Syslog server
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
+ // Syslog
public bool AddSyslogServer(string address, int port, string nickName = null, List typesToLog = null, bool convertToRfc5424 = false, bool convertToRfc3164 = false)
{
- if (Settings.SysLogServers == null)
- {
- Settings.SysLogServers = new List();
- }
+ Settings.SysLogServers ??= new List();
- if (Settings.SysLogServers.Any(x => (nickName != null && x.Nickname == nickName) || nickName == null && x.Hostname == address && x.Port == port))
+ if (Settings.SysLogServers.Any(x => (nickName != null && x.Nickname == nickName) || (nickName == null && x.Hostname == address && x.Port == port)))
{
return false;
}
@@ -366,12 +332,6 @@ namespace EonaCat.Logger.Managers
return true;
}
- ///
- /// Remove the sysLog server
- ///
- ///
- ///
- ///
public bool RemoveSyslogServer(string address, int port)
{
if (Settings.SysLogServers == null)
@@ -379,19 +339,15 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.SysLogServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
- if (delete != null)
+ var server = Settings.SysLogServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
+ if (server != null)
{
- Settings.SysLogServers.Remove(delete);
+ Settings.SysLogServers.Remove(server);
}
+
return true;
}
- ///
- /// Remove the sysLog server
- ///
- ///
- ///
public bool RemoveSyslogServer(string nickName)
{
if (Settings.SysLogServers == null)
@@ -399,31 +355,21 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.SysLogServers.FirstOrDefault(x => x.Nickname == nickName);
- if (delete != null)
+ var server = Settings.SysLogServers.FirstOrDefault(x => x.Nickname == nickName);
+ if (server != null)
{
- Settings.SysLogServers.Remove(delete);
+ Settings.SysLogServers.Remove(server);
}
+
return true;
}
- ///
- /// Add Splunk server
- ///
- ///
- ///
- ///
- ///
- ///
- ///
+ // Splunk
public bool AddSplunkServer(string splunkHecUrl, string splunkHecToken, HttpClientHandler httpClientHandler = null, string nickName = null, List typesToLog = null)
{
- if (Settings.SplunkServers == null)
- {
- Settings.SplunkServers = new List();
- }
+ Settings.SplunkServers ??= new List();
- if (Settings.SplunkServers.Any(x => (nickName != null && x.Nickname == nickName) || nickName == null && x.SplunkHecUrl == splunkHecUrl && x.SplunkHecToken == splunkHecToken))
+ if (Settings.SplunkServers.Any(x => (nickName != null && x.Nickname == nickName) || (nickName == null && x.SplunkHecUrl == splunkHecUrl && x.SplunkHecToken == splunkHecToken)))
{
return false;
}
@@ -432,12 +378,6 @@ namespace EonaCat.Logger.Managers
return true;
}
- ///
- /// Remove the Splunk server
- ///
- ///
- ///
- ///
public bool RemoveSplunkServer(string splunkHecUrl, string splunkHecToken)
{
if (Settings.SplunkServers == null)
@@ -445,19 +385,15 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.SplunkServers.FirstOrDefault(x => x.SplunkHecUrl == splunkHecUrl && x.SplunkHecToken == splunkHecToken);
- if (delete != null)
+ var server = Settings.SplunkServers.FirstOrDefault(x => x.SplunkHecUrl == splunkHecUrl && x.SplunkHecToken == splunkHecToken);
+ if (server != null)
{
- Settings.SplunkServers.Remove(delete);
+ Settings.SplunkServers.Remove(server);
}
+
return true;
}
- ///
- /// Remove the Splunk server
- ///
- ///
- ///
public bool RemoveSplunkServer(string nickName)
{
if (Settings.SplunkServers == null)
@@ -465,30 +401,21 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.SplunkServers.FirstOrDefault(x => x.Nickname == nickName);
- if (delete != null)
+ var server = Settings.SplunkServers.FirstOrDefault(x => x.Nickname == nickName);
+ if (server != null)
{
- Settings.SplunkServers.Remove(delete);
+ Settings.SplunkServers.Remove(server);
}
+
return true;
}
- ///
- /// Add Graylog server
- ///
- ///
- ///
- ///
- ///
- ///
+ // Graylog
public bool AddGrayLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
- if (Settings.GrayLogServers == null)
- {
- Settings.GrayLogServers = new List();
- }
+ Settings.GrayLogServers ??= new List();
- if (Settings.GrayLogServers.Any(x => (nickName != null && x.Nickname == nickName) || nickName == null && x.Hostname == address && x.Port == port))
+ if (Settings.GrayLogServers.Any(x => (nickName != null && x.Nickname == nickName) || (nickName == null && x.Hostname == address && x.Port == port)))
{
return false;
}
@@ -497,12 +424,6 @@ namespace EonaCat.Logger.Managers
return true;
}
- ///
- /// Remove the GrayLog server
- ///
- ///
- ///
- ///
public bool RemoveGrayLogServer(string address, int port)
{
if (Settings.GrayLogServers == null)
@@ -510,19 +431,15 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.GrayLogServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
- if (delete != null)
+ var server = Settings.GrayLogServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
+ if (server != null)
{
- Settings.GrayLogServers.Remove(delete);
+ Settings.GrayLogServers.Remove(server);
}
+
return true;
}
- ///
- /// Remove the GrayLog server
- ///
- ///
- ///
public bool RemoveGrayLogServer(string nickName)
{
if (Settings.GrayLogServers == null)
@@ -530,28 +447,19 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.GrayLogServers.FirstOrDefault(x => x.Nickname == nickName);
- if (delete != null)
+ var server = Settings.GrayLogServers.FirstOrDefault(x => x.Nickname == nickName);
+ if (server != null)
{
- Settings.GrayLogServers.Remove(delete);
+ Settings.GrayLogServers.Remove(server);
}
+
return true;
}
- ///
- /// Add Tcp Server
- ///
- ///
- ///
- ///
- ///
- ///
+ // TCP
public bool AddTcpLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
- if (Settings.TcpServers == null)
- {
- Settings.TcpServers = new List();
- }
+ Settings.TcpServers ??= new List();
if (Settings.TcpServers.Any(x => (nickName != null && x.Nickname == nickName) || (nickName == null && x.Hostname == address && x.Port == port)))
{
@@ -562,12 +470,6 @@ namespace EonaCat.Logger.Managers
return true;
}
- ///
- /// Remove the Tcp server
- ///
- ///
- ///
- ///
public bool RemoveTcpLogServer(string address, int port)
{
if (Settings.TcpServers == null)
@@ -575,19 +477,15 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.TcpServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
- if (delete != null)
+ var server = Settings.TcpServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
+ if (server != null)
{
- Settings.TcpServers.Remove(delete);
+ Settings.TcpServers.Remove(server);
}
+
return true;
}
- ///
- /// Remove the Tcp server
- ///
- ///
- ///
public bool RemoveTcpLogServer(string nickName)
{
if (Settings.TcpServers == null)
@@ -595,30 +493,21 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.TcpServers.FirstOrDefault(x => x.Nickname == nickName);
- if (delete != null)
+ var server = Settings.TcpServers.FirstOrDefault(x => x.Nickname == nickName);
+ if (server != null)
{
- Settings.TcpServers.Remove(delete);
+ Settings.TcpServers.Remove(server);
}
+
return true;
}
- ///
- /// Add Udp Server
- ///
- ///
- ///
- ///
- ///
- ///
+ // UDP
public bool AddUdpLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
- if (Settings.UdpServers == null)
- {
- Settings.UdpServers = new List();
- }
+ Settings.UdpServers ??= new List();
- if (Settings.UdpServers.Any(x => (nickName != null && x.Nickname == nickName) || nickName == null && x.Hostname == address && x.Port == port))
+ if (Settings.UdpServers.Any(x => (nickName != null && x.Nickname == nickName) || (nickName == null && x.Hostname == address && x.Port == port)))
{
return false;
}
@@ -627,12 +516,6 @@ namespace EonaCat.Logger.Managers
return true;
}
- ///
- /// Remove the Udp server
- ///
- ///
- ///
- ///
public bool RemoveUdpLogServer(string address, int port)
{
if (Settings.UdpServers == null)
@@ -640,19 +523,15 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.UdpServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
- if (delete != null)
+ var server = Settings.UdpServers.FirstOrDefault(x => x.Hostname == address && x.Port == port);
+ if (server != null)
{
- Settings.UdpServers.Remove(delete);
+ Settings.UdpServers.Remove(server);
}
+
return true;
}
- ///
- /// Remove the Udp server
- ///
- ///
- ///
public bool RemoveUdpLogServer(string nickName)
{
if (Settings.UdpServers == null)
@@ -660,12 +539,13 @@ namespace EonaCat.Logger.Managers
return false;
}
- var delete = Settings.UdpServers.FirstOrDefault(x => x.Nickname == nickName);
- if (delete != null)
+ var server = Settings.UdpServers.FirstOrDefault(x => x.Nickname == nickName);
+ if (server != null)
{
- Settings.UdpServers.Remove(delete);
+ Settings.UdpServers.Remove(server);
}
+
return true;
}
}
-}
\ No newline at end of file
+}
diff --git a/EonaCat.Logger/Servers/Splunk/Splunk.cs b/EonaCat.Logger/Servers/Splunk/Splunk.cs
index 297c3a0..37d6380 100644
--- a/EonaCat.Logger/Servers/Splunk/Splunk.cs
+++ b/EonaCat.Logger/Servers/Splunk/Splunk.cs
@@ -28,7 +28,9 @@ namespace EonaCat.Logger.Servers.Splunk
set
{
if (string.IsNullOrWhiteSpace(value))
+ {
throw new ArgumentNullException(nameof(SplunkHecUrl));
+ }
_splunkHecUrl = value.StartsWith("http", StringComparison.OrdinalIgnoreCase)
? value
@@ -91,13 +93,19 @@ namespace EonaCat.Logger.Servers.Splunk
try
{
if (payload == null)
+ {
return null;
+ }
if (!HasHecToken || !HasHecUrl)
+ {
return null;
+ }
if (disableSplunkSSL)
+ {
DisableSSLValidation();
+ }
_httpClient ??= new HttpClient(_httpClientHandler ?? new HttpClientHandler())
{
diff --git a/EonaCat.Logger/Servers/Syslog/Syslog.cs b/EonaCat.Logger/Servers/Syslog/Syslog.cs
index f29c5e7..e2eadb8 100644
--- a/EonaCat.Logger/Servers/Syslog/Syslog.cs
+++ b/EonaCat.Logger/Servers/Syslog/Syslog.cs
@@ -42,7 +42,9 @@ namespace EonaCat.Logger.Servers.Syslog
set
{
if (string.IsNullOrWhiteSpace(value))
+ {
throw new ArgumentNullException(nameof(Hostname));
+ }
_hostname = value;
SetUdp();
@@ -55,7 +57,9 @@ namespace EonaCat.Logger.Servers.Syslog
set
{
if (value < 0)
+ {
throw new ArgumentException("Port must be zero or greater.");
+ }
_port = value;
SetUdp();
@@ -96,7 +100,9 @@ namespace EonaCat.Logger.Servers.Syslog
public async Task WriteAsync(string message)
{
if (string.IsNullOrWhiteSpace(message))
+ {
return;
+ }
var data = Encoding.UTF8.GetBytes(message);
await SendAsync(data);
@@ -105,13 +111,17 @@ namespace EonaCat.Logger.Servers.Syslog
public async Task WriteAsync(byte[] data)
{
if (data is { Length: > 0 })
+ {
await SendAsync(data);
+ }
}
private async Task SendAsync(byte[] data)
{
if (_udp == null)
+ {
return;
+ }
if (data.Length <= MaxUdpPacketSize)
{
diff --git a/EonaCat.Logger/Servers/Tcp/Tcp.cs b/EonaCat.Logger/Servers/Tcp/Tcp.cs
index 6a1f851..6ac8f2b 100644
--- a/EonaCat.Logger/Servers/Tcp/Tcp.cs
+++ b/EonaCat.Logger/Servers/Tcp/Tcp.cs
@@ -38,7 +38,9 @@ namespace EonaCat.Logger.Servers.Tcp
set
{
if (string.IsNullOrWhiteSpace(value))
+ {
throw new ArgumentNullException(nameof(Hostname));
+ }
_hostname = value;
SetTcp();
@@ -51,7 +53,9 @@ namespace EonaCat.Logger.Servers.Tcp
set
{
if (value < 0)
+ {
throw new ArgumentException("Port must be zero or greater.");
+ }
_port = value;
SetTcp();
@@ -91,13 +95,21 @@ namespace EonaCat.Logger.Servers.Tcp
public async Task WriteAsync(byte[] data)
{
- if (data == null || data.Length == 0) return;
+ if (data == null || data.Length == 0)
+ {
+ return;
+ }
+
await InternalWriteAsync(data);
}
public async Task WriteAsync(string data)
{
- if (string.IsNullOrWhiteSpace(data)) return;
+ if (string.IsNullOrWhiteSpace(data))
+ {
+ return;
+ }
+
var bytes = Encoding.UTF8.GetBytes(data);
await InternalWriteAsync(bytes);
}
@@ -108,10 +120,14 @@ namespace EonaCat.Logger.Servers.Tcp
try
{
if (!IsConnected || _tcp == null)
+ {
SetTcp();
+ }
if (!IsConnected || _tcp == null)
+ {
return;
+ }
var stream = _tcp.GetStream();
await stream.WriteAsync(data, 0, data.Length);
diff --git a/EonaCat.Logger/Servers/Udp/Udp.cs b/EonaCat.Logger/Servers/Udp/Udp.cs
index 9f175cc..bafa52a 100644
--- a/EonaCat.Logger/Servers/Udp/Udp.cs
+++ b/EonaCat.Logger/Servers/Udp/Udp.cs
@@ -39,7 +39,9 @@ namespace EonaCat.Logger.Servers.Udp
set
{
if (string.IsNullOrWhiteSpace(value))
+ {
throw new ArgumentNullException(nameof(Hostname));
+ }
_hostname = value;
SetUdp();
@@ -52,7 +54,9 @@ namespace EonaCat.Logger.Servers.Udp
set
{
if (value < 0)
+ {
throw new ArgumentException("Port must be zero or greater.");
+ }
_port = value;
SetUdp();
@@ -96,16 +100,22 @@ namespace EonaCat.Logger.Servers.Udp
public async Task WriteAsync(byte[] data, bool dontFragment = false)
{
if (data == null || data.Length == 0)
+ {
return;
+ }
await _sendLock.WaitAsync();
try
{
if (!IsConnected)
+ {
SetUdp();
+ }
if (!IsConnected || _udp == null)
+ {
return;
+ }
_udp.DontFragment = dontFragment;
@@ -120,7 +130,9 @@ namespace EonaCat.Logger.Servers.Udp
public async Task WriteAsync(string data, bool dontFragment = false)
{
if (string.IsNullOrWhiteSpace(data))
+ {
return;
+ }
var bytes = Encoding.UTF8.GetBytes(data);
await WriteAsync(bytes, dontFragment);
diff --git a/Testers/EonaCat.Logger.Test.Web/Program.cs b/Testers/EonaCat.Logger.Test.Web/Program.cs
index 741e5b9..9f0daad 100644
--- a/Testers/EonaCat.Logger.Test.Web/Program.cs
+++ b/Testers/EonaCat.Logger.Test.Web/Program.cs
@@ -40,6 +40,17 @@
int onLogCounter = 0;
var defaultColor = Console.ForegroundColor;
+ _ = Task.Run(() =>
+ {
+ var logman = LogManager.Instance;
+ var i = 0;
+ while (true)
+ {
+ logman.WriteAsync($"Logman test {++i}", ELogType.TRACE).ConfigureAwait(false);
+ Task.Delay(10).ConfigureAwait(false);
+ }
+ }).ConfigureAwait(false);
+
// Add services to the container.
Logger logger = new Logger();
logger.UseLocalTime = true;
@@ -209,7 +220,7 @@
}
}
- MemoryLeakTester.Start(logger);
+ //MemoryLeakTester.Start(logger);
_ = Task.Run(RunMemoryReportTask).ConfigureAwait(false);
_ = Task.Run(RunMaskTest).ConfigureAwait(false);
_ = Task.Run(RunWebLoggerTestsAsync).ConfigureAwait(false);