diff --git a/EonaCat.Logger/Enums.cs b/EonaCat.Logger/Enums.cs
index 517b748..01d7f5c 100644
--- a/EonaCat.Logger/Enums.cs
+++ b/EonaCat.Logger/Enums.cs
@@ -150,6 +150,34 @@ public static class LogTypeConverter
}
}
+public enum SyslogFacility
+{
+ Kernel = 0, // 0 - Kernel messages
+ UserLevel = 1, // 1 - User-level messages
+ MailSystem = 2, // 2 - Mail system
+ Daemon = 3, // 3 - Daemon messages
+ Auth = 4, // 4 - Security/authorization messages
+ Syslog = 5, // 5 - Messages generated by syslogd
+ Lpr = 6, // 6 - Line printer subsystem
+ News = 7, // 7 - Network news subsystem
+ UUCP = 8, // 8 - UUCP subsystem
+ Clock = 9, // 9 - Clock daemon
+ AuthPriv = 10, // 10 - Security/authorization messages (privileged)
+ Ftp = 11, // 11 - FTP daemon
+ Ntp = 12, // 12 - NTP subsystem
+ Audit = 13, // 13 - Audit messages
+ Alert = 14, // 14 - Log alert messages
+ Cron = 15, // 15 - Cron daemon
+ Local0 = 16, // 16 - Local use 0 (custom usage)
+ Local1 = 17, // 17 - Local use 1 (custom usage)
+ Local2 = 18, // 18 - Local use 2 (custom usage)
+ Local3 = 19, // 19 - Local use 3 (custom usage)
+ Local4 = 20, // 20 - Local use 4 (custom usage)
+ Local5 = 21, // 21 - Local use 5 (custom usage)
+ Local6 = 22, // 22 - Local use 6 (custom usage)
+ Local7 = 23 // 23 - Local use 7 (custom usage)
+}
+
///
/// Message severity.
///
diff --git a/EonaCat.Logger/EonaCat.Logger.csproj b/EonaCat.Logger/EonaCat.Logger.csproj
index 3cf026d..f9d5a58 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.8
+ 1.3.9
EonaCat (Jeroen Saey)
true
EonaCat (Jeroen Saey)
@@ -24,7 +24,7 @@
- 1.3.8+{chash:10}.{c:ymd}
+ 1.3.9+{chash:10}.{c:ymd}
true
true
v[0-9]*
diff --git a/EonaCat.Logger/Managers/ILogManager.cs b/EonaCat.Logger/Managers/ILogManager.cs
index 0260478..375233e 100644
--- a/EonaCat.Logger/Managers/ILogManager.cs
+++ b/EonaCat.Logger/Managers/ILogManager.cs
@@ -9,9 +9,9 @@ public interface ILogManager
{
Task WriteAsync(string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null,
string customSplunkSourceType = null, string grayLogFacility = null, string grayLogSource = null,
- string grayLogVersion = "1.1");
+ string grayLogVersion = "1.1", bool disableSplunkSSL = false);
Task WriteAsync(Exception exception, string module = null, string method = null, bool criticalException = false,
bool? writeToConsole = null, string customSplunkSourceType = null, string grayLogFacility = null,
- string grayLogSource = null, string grayLogVersion = "1.1");
+ string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false);
}
\ No newline at end of file
diff --git a/EonaCat.Logger/Managers/LogHelper.cs b/EonaCat.Logger/Managers/LogHelper.cs
index fa1281c..146252f 100644
--- a/EonaCat.Logger/Managers/LogHelper.cs
+++ b/EonaCat.Logger/Managers/LogHelper.cs
@@ -30,6 +30,44 @@ internal static class LogHelper
private static readonly string MachineName = Environment.MachineName;
private static readonly string HostName = Dns.GetHostName();
+ internal static string ConvertToSyslogRfc5424(LoggerSettings settings, ELogType logType, string currentMessage, DateTime dateTime, string category = null)
+ {
+ string formattedMessage = FormatMessageWithHeader(settings, logType, currentMessage, dateTime, category);
+
+ if (string.IsNullOrWhiteSpace(formattedMessage))
+ {
+ return formattedMessage;
+ }
+
+ string hostname = HostName;
+
+ int facility = (int)SyslogFacility.Local0;
+ int severity = (int)logType;
+ int pri = (facility * 8) + severity;
+ string timestamp = dateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffZ");
+ string syslogMessage = $"<{pri}>1 {timestamp} {hostname} {settings?.Id ?? "EonaCatLogger"} - - {formattedMessage}";
+ return syslogMessage;
+ }
+
+ internal static string ConvertToSyslogRfc3164(LoggerSettings settings, ELogType logType, string currentMessage, DateTime dateTime, string category = null)
+ {
+ string formattedMessage = FormatMessageWithHeader(settings, logType, currentMessage, dateTime, category);
+
+ if (string.IsNullOrWhiteSpace(formattedMessage))
+ {
+ return formattedMessage;
+ }
+
+ string hostname = HostName;
+ int facility = (int)SyslogFacility.Local0;
+ int severity = (int)logType;
+ int pri = (facility * 8) + severity;
+ string timestamp = dateTime.ToString("MMM dd HH:mm:ss");
+ string syslogMessage = $"<{pri}>{timestamp} {hostname} {settings?.Id ?? "EonaCatLogger"}: {formattedMessage}";
+ return syslogMessage;
+ }
+
+
internal static string FormatMessageWithHeader(LoggerSettings settings, ELogType logType, string currentMessage,
DateTime dateTime, string category = null)
{
@@ -62,9 +100,12 @@ internal static class LogHelper
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)
{
- if (settings == null || !writeToConsole || string.IsNullOrWhiteSpace(message)) return;
+ if (settings == null || string.IsNullOrWhiteSpace(message))
+ {
+ return;
+ }
if (settings.EnableColors && settings.Colors != null)
{
@@ -121,6 +162,7 @@ internal static class LogHelper
Log(logger, logType.ToLogLevel(), message);
}
}
+
private static bool IsLogLevelEnabled(LoggerSettings loggerSettings, ELogType logType)
{
if (loggerSettings == null)
@@ -129,18 +171,50 @@ internal static class LogHelper
return false;
}
- var isEnabled = loggerSettings.MaxLogType != ELogType.NONE && logType <= loggerSettings.MaxLogType;
- if (!isEnabled)
+ var isEnabled = loggerSettings.TypesToLog == null || loggerSettings.TypesToLog.Count == 0 || loggerSettings.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
{
OnLogLevelDisabled?.Invoke(null, new ErrorMessage { Message = $"Logtype '{logType}' is not enabled." });
+ return false;
}
-
- return isEnabled;
+ return true;
}
- public static void SetLogLevel(LoggerSettings settings, ELogType logType)
+ public static void AddLogLevel(LoggerSettings settings, ELogType logType)
{
- settings.MaxLogType = logType;
+ if (logType == ELogType.NONE)
+ {
+ return;
+ }
+
+ if (settings.TypesToLog == null || settings.TypesToLog.Count == 0)
+ {
+ settings.TypesToLog = new List();
+ }
+
+ if (!settings.TypesToLog.Contains(logType))
+ {
+ settings.TypesToLog.Add(logType);
+ }
+ }
+
+ public static void RemoveLogLevel(LoggerSettings settings, ELogType logType)
+ {
+ if (logType == ELogType.NONE)
+ {
+ return;
+ }
+
+ if (settings.TypesToLog == null || settings.TypesToLog.Count == 0)
+ {
+ settings.TypesToLog = new List();
+ }
+
+ if (!settings.TypesToLog.Contains(logType))
+ {
+ return;
+ }
+ settings.TypesToLog.Remove(logType);
}
private static void Log(ILogger logger, LogLevel logLevel, string message)
@@ -148,7 +222,12 @@ internal static class LogHelper
logger.Log(logLevel, message);
}
- public static async Task SendToSplunkServersAsync(LoggerSettings settings, SplunkPayload splunkPayload)
+ private static bool TryGetEnumValue(string value, out TEnum result) where TEnum : struct, Enum
+ {
+ return Enum.TryParse(value, true, out result);
+ }
+
+ private static async Task SendToSplunkServersAsync(LoggerSettings settings, SplunkPayload splunkPayload, string logType, bool disableSplunkSSL = false)
{
if (settings == null || splunkPayload == null)
{
@@ -166,7 +245,18 @@ internal static class LogHelper
{
try
{
- var response = await splunkServer.SendAsync(splunkPayload);
+ bool isValid = TryGetEnumValue(logType, out ELogType currentLogType);
+ if (isValid)
+ {
+ var isEnabled = splunkServer.TypesToLog == null || splunkServer.TypesToLog.Count == 0 || splunkServer.TypesToLog.Contains(currentLogType);
+ if (currentLogType == ELogType.NONE || !isEnabled)
+ {
+ splunkServer?.DisposeHttpClient();
+ return;
+ }
+ }
+
+ var response = await splunkServer.SendAsync(splunkPayload, disableSplunkSSL);
if (!response.IsSuccessStatusCode)
{
LogError($"Failed to send log to Splunk '{splunkServer.SplunkHecUrl}'. Status code: {response.StatusCode}");
@@ -184,7 +274,7 @@ internal static class LogHelper
///
/// Overload for sending a simple log message to Splunk.
///
- public static async Task SendToSplunkServersAsync(LoggerSettings settings, string logType, string message)
+ public static async Task SendToSplunkServersAsync(LoggerSettings settings, string logType, string message, bool disableSplunkSSL = false)
{
if (settings == null || string.IsNullOrWhiteSpace(message))
{
@@ -200,10 +290,10 @@ internal static class LogHelper
{
Host = Environment.MachineName,
EventData = message,
- SourceType = logType
+ SourceType = logType,
};
- await SendToSplunkServersAsync(settings, splunkPayload);
+ await SendToSplunkServersAsync(settings, splunkPayload, logType, disableSplunkSSL);
}
///
@@ -215,7 +305,7 @@ internal static class LogHelper
}
- internal static async Task SendToGrayLogServersAsync(LoggerSettings settings, string message, ELogType logLevel,
+ internal static async Task SendToGrayLogServersAsync(LoggerSettings settings, string message, ELogType logType,
string facility, string source, string version = "1.1")
{
if (settings == null || string.IsNullOrWhiteSpace(message))
@@ -235,7 +325,7 @@ internal static class LogHelper
version,
host = MachineName,
short_message = message,
- level = logLevel.ToGrayLogLevel(),
+ level = logType.ToGrayLogLevel(),
facility,
source,
timestamp = DateTime.UtcNow.ToUnixTimestamp()
@@ -249,6 +339,18 @@ internal static class LogHelper
{
try
{
+ var isEnabled = grayLogServer.TypesToLog == null || grayLogServer.TypesToLog.Count == 0 || grayLogServer.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
+ {
+ grayLogServer?.DisposeUdp();
+ return;
+ }
+
+ if (!grayLogServer.IsConnected)
+ {
+ grayLogServer.SetUdp();
+ }
+
if (messageBytes.Length <= MaxUdpPacketSize)
{
// Send via UDP (single packet)
@@ -302,7 +404,7 @@ internal static class LogHelper
}
}
- internal static async Task SendToSysLogServersAsync(LoggerSettings settings, string message)
+ internal static async Task SendToSysLogServersAsync(LoggerSettings settings, string message, ELogType logType, DateTime dateTime, string category)
{
if (settings == null || string.IsNullOrWhiteSpace(message))
{
@@ -322,6 +424,27 @@ internal static class LogHelper
{
try
{
+ var isEnabled = server.TypesToLog == null || server.TypesToLog.Count == 0 || server.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
+ {
+ server?.DisposeUdp();
+ return;
+ }
+
+ if (server.ConvertToRfc5424)
+ {
+ message = ConvertToSyslogRfc5424(settings, logType, message, dateTime, category);
+ }
+ else if (server.ConvertToRfc3164)
+ {
+ message = ConvertToSyslogRfc3164(settings, logType, message, dateTime, category);
+ }
+
+ if (!server.IsConnected)
+ {
+ server.SetUdp();
+ }
+
var data = Encoding.UTF8.GetBytes(message);
if (data.Length <= MaxUdpPacketSize)
@@ -353,7 +476,7 @@ internal static class LogHelper
await Task.WhenAll(tasks);
}
- internal static async Task SendToTcpLogServersAsync(LoggerSettings settings, string message)
+ internal static async Task SendToTcpLogServersAsync(LoggerSettings settings, string message, ELogType logType)
{
if (settings == null || string.IsNullOrWhiteSpace(message))
{
@@ -364,16 +487,26 @@ internal static class LogHelper
{
return;
}
-
+
var tasks = settings.TcpServers?
.Where(server => !string.IsNullOrWhiteSpace(server.Hostname) && server.Port >= 0)
.Select(async server =>
{
try
{
+ var isEnabled = server.TypesToLog == null || server.TypesToLog.Count == 0 || server.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
+ {
+ server?.DisposeTcp();
+ return;
+ }
+
+ if (!server.IsConnected)
+ {
+ server.SetTcp();
+ }
+
var data = Encoding.UTF8.GetBytes(message);
- server.DisposeTcp();
- server.SetTcp();
await server.WriteAsync(data).ConfigureAwait(false);
}
catch (Exception ex)
@@ -389,7 +522,7 @@ internal static class LogHelper
await Task.WhenAll(tasks);
}
- internal static async Task SendToUdpLogServersAsync(LoggerSettings settings, string message)
+ internal static async Task SendToUdpLogServersAsync(LoggerSettings settings, string message, ELogType logType)
{
if (settings == null || string.IsNullOrWhiteSpace(message))
{
@@ -407,9 +540,19 @@ internal static class LogHelper
{
try
{
+ var isEnabled = server.TypesToLog == null || server.TypesToLog.Count == 0 || server.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
+ {
+ server?.DisposeUdp();
+ return;
+ }
+
+ if (!server.IsConnected)
+ {
+ server.SetUdp();
+ }
+
var data = Encoding.UTF8.GetBytes(message);
- server.DisposeUdp();
- server.SetUdp();
await server.WriteAsync(data).ConfigureAwait(false);
}
catch (Exception ex)
diff --git a/EonaCat.Logger/Managers/LogManager.cs b/EonaCat.Logger/Managers/LogManager.cs
index e59f418..e3d9eb4 100644
--- a/EonaCat.Logger/Managers/LogManager.cs
+++ b/EonaCat.Logger/Managers/LogManager.cs
@@ -79,7 +79,7 @@ namespace EonaCat.Logger.Managers
public async Task WriteAsync(Exception exception, string module = null, string method = null,
bool criticalException = false,
bool? writeToConsole = null, string customSplunkSourceType = null, string grayLogFacility = null,
- string grayLogSource = null, string grayLogVersion = "1.1")
+ string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (exception == null)
{
@@ -89,13 +89,13 @@ namespace EonaCat.Logger.Managers
await WriteAsync(exception.FormatExceptionToMessage(module, method),
criticalException ? ELogType.CRITICAL : ELogType.ERROR, writeToConsole,
customSplunkSourceType, grayLogFacility, grayLogSource,
- grayLogVersion);
+ grayLogVersion, disableSplunkSSL = false);
}
public async Task WriteAsync(string message, ELogType logType = ELogType.INFO, bool? writeToConsole = null,
string customSplunkSourceType = null,
string grayLogFacility = null, string grayLogSource = null,
- string grayLogVersion = "1.1")
+ string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (logType == ELogType.NONE)
{
@@ -103,7 +103,7 @@ namespace EonaCat.Logger.Managers
}
await InternalWriteAsync(CurrentDateTime, message, logType, writeToConsole,
- customSplunkSourceType, grayLogFacility, grayLogSource, grayLogVersion);
+ customSplunkSourceType, grayLogFacility, grayLogSource, grayLogVersion, disableSplunkSSL);
}
///
@@ -121,7 +121,6 @@ namespace EonaCat.Logger.Managers
var settings = new LoggerSettings
{
Id = "EonaCatLogger",
- MaxLogType = ELogType.INFO
};
return settings;
}
@@ -164,7 +163,7 @@ namespace EonaCat.Logger.Managers
LoggerFactory?.Dispose();
IServiceCollection serviceCollection = new ServiceCollection();
- serviceCollection.AddLogging(builder => builder.SetMinimumLevel(Settings.MaxLogType.ToLogLevel())
+ serviceCollection.AddLogging(builder => builder.SetMinimumLevel(Settings.TypesToLog.Min().ToLogLevel())
.AddEonaCatFileLogger(configuration =>
{
var fileLoggerOptions = Settings.FileLoggerOptions;
@@ -193,7 +192,7 @@ namespace EonaCat.Logger.Managers
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")
+ string grayLogSource = null, string grayLogVersion = "1.1", bool disableSplunkSSL = false)
{
if (string.IsNullOrWhiteSpace(message) || logType == ELogType.NONE || !IsLogLevelEnabled(logType) || _isDisposing)
{
@@ -212,16 +211,16 @@ namespace EonaCat.Logger.Managers
if (writeToConsoleValue)
{
- LogHelper.SendToConsole(Settings, logType, messageWithHeader, true);
+ LogHelper.SendToConsole(Settings, logType, messageWithHeader);
}
var tasks = new List(5)
{
- LogHelper.SendToSysLogServersAsync(Settings, messageWithHeader),
- LogHelper.SendToSplunkServersAsync(Settings, customSplunkSourceType ?? logType.ToString(), messageWithHeader),
+ 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),
- LogHelper.SendToUdpLogServersAsync(Settings, messageWithHeader),
+ LogHelper.SendToTcpLogServersAsync(Settings, messageWithHeader, logType),
+ LogHelper.SendToUdpLogServersAsync(Settings, messageWithHeader, logType),
};
if (tasks.Count > 0)
@@ -247,12 +246,13 @@ namespace EonaCat.Logger.Managers
return false;
}
- var isEnabled = Settings.MaxLogType != ELogType.NONE && logType <= Settings.MaxLogType;
- if (!isEnabled)
+ var isEnabled = Settings.TypesToLog == null || Settings.TypesToLog.Count == 0 || Settings.TypesToLog.Contains(logType);
+ if (logType == ELogType.NONE || !isEnabled)
{
OnLogLevelDisabled?.Invoke(this, new ErrorMessage { Message = $"Logtype '{logType}' is not enabled, cannot log message" });
+ return false;
}
- return isEnabled;
+ return true;
}
public void Reset()
@@ -321,13 +321,16 @@ namespace EonaCat.Logger.Managers
}
///
- /// Add sysLog server
+ /// Add Syslog server
///
///
///
///
+ ///
+ ///
+ ///
///
- public bool AddSyslogServer(string address, int port, string nickName = null)
+ public bool AddSyslogServer(string address, int port, string nickName = null, List typesToLog = null, bool convertToRfc5424 = false, bool convertToRfc3164 = false)
{
if (Settings.SysLogServers == null)
{
@@ -339,7 +342,7 @@ namespace EonaCat.Logger.Managers
return false;
}
- Settings.SysLogServers.Add(new Syslog(address, port));
+ Settings.SysLogServers.Add(new Syslog(address, port, nickName, typesToLog, convertToRfc5424, convertToRfc3164));
return true;
}
@@ -389,10 +392,11 @@ namespace EonaCat.Logger.Managers
///
///
///
- /// (optional)
- /// (optional)
+ ///
+ ///
+ ///
///
- public bool AddSplunkServer(string splunkHecUrl, string splunkHecToken, HttpClientHandler httpClientHandler = null, string nickName = null)
+ public bool AddSplunkServer(string splunkHecUrl, string splunkHecToken, HttpClientHandler httpClientHandler = null, string nickName = null, List typesToLog = null)
{
if (Settings.SplunkServers == null)
{
@@ -404,7 +408,7 @@ namespace EonaCat.Logger.Managers
return false;
}
- Settings.SplunkServers.Add(new Splunk(splunkHecUrl, splunkHecToken, httpClientHandler, nickName));
+ Settings.SplunkServers.Add(new Splunk(splunkHecUrl, splunkHecToken, httpClientHandler, nickName, typesToLog));
return true;
}
@@ -450,13 +454,14 @@ namespace EonaCat.Logger.Managers
}
///
- /// Add GrayLog server
+ /// Add Graylog server
///
///
///
///
+ ///
///
- public bool AddGrayLogServer(string address, int port, string nickName = null)
+ public bool AddGrayLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
if (Settings.GrayLogServers == null)
{
@@ -468,7 +473,7 @@ namespace EonaCat.Logger.Managers
return false;
}
- Settings.GrayLogServers.Add(new Graylog(address, port));
+ Settings.GrayLogServers.Add(new Graylog(address, port, nickName, typesToLog));
return true;
}
@@ -514,13 +519,14 @@ namespace EonaCat.Logger.Managers
}
///
- /// Add Tcp server
+ /// Add Tcp Server
///
///
///
///
+ ///
///
- public bool AddTcpLogServer(string address, int port, string nickName = null)
+ public bool AddTcpLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
if (Settings.TcpServers == null)
{
@@ -532,7 +538,7 @@ namespace EonaCat.Logger.Managers
return false;
}
- Settings.TcpServers.Add(new Tcp(address, port));
+ Settings.TcpServers.Add(new Tcp(address, port, nickName, typesToLog));
return true;
}
@@ -578,13 +584,14 @@ namespace EonaCat.Logger.Managers
}
///
- /// Add Udp server
+ /// Add Udp Server
///
///
///
///
+ ///
///
- public bool AddUdpLogServer(string address, int port, string nickName = null)
+ public bool AddUdpLogServer(string address, int port, string nickName = null, List typesToLog = null)
{
if (Settings.UdpServers == null)
{
@@ -596,7 +603,7 @@ namespace EonaCat.Logger.Managers
return false;
}
- Settings.UdpServers.Add(new Udp(address, port));
+ Settings.UdpServers.Add(new Udp(address, port, nickName, typesToLog));
return true;
}
diff --git a/EonaCat.Logger/Managers/LoggerSettings.cs b/EonaCat.Logger/Managers/LoggerSettings.cs
index e500570..5ee3219 100644
--- a/EonaCat.Logger/Managers/LoggerSettings.cs
+++ b/EonaCat.Logger/Managers/LoggerSettings.cs
@@ -23,7 +23,6 @@ public class LoggerSettings
private FileLoggerOptions _fileLoggerOptions;
private string _headerFormat = "{ts} {host} {category} {thread} {sev}";
- private int _maxMessageLength = 1024;
private string _timestampFormat = "yyyy-MM-dd HH:mm:ss";
///
@@ -126,9 +125,22 @@ public class LoggerSettings
}
}
- public ELogType MaxLogType { get; set; } = ELogType.INFO;
+ private List _logTypes = new List { ELogType.INFO, ELogType.WARNING, ELogType.ERROR, ELogType.TRAFFIC, ELogType.DEBUG, ELogType.CRITICAL, ELogType.TRACE };
+ public List TypesToLog
+ {
+ get
+ {
+ return _logTypes;
+ }
+
+ set
+ {
+ _logTypes = value;
+ }
+ }
+
public List SysLogServers { get; internal set; }
- public List SplunkServers { get; internal set; }
+ public List SplunkServers { get; internal set; }
public List GrayLogServers { get; internal set; }
public List TcpServers { get; internal set; }
@@ -232,4 +244,100 @@ public class LoggerSettings
{
OnLog = null;
}
+
+ public void AllowAllLogTypes()
+ {
+ TypesToLog.Clear();
+ }
+
+ public void LogInfo()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.INFO))
+ {
+ TypesToLog.Add(ELogType.INFO);
+ }
+ }
+
+ public void LogWarning()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.WARNING))
+ {
+ TypesToLog.Add(ELogType.WARNING);
+ }
+ }
+
+ public void LogError()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.ERROR))
+ {
+ TypesToLog.Add(ELogType.ERROR);
+ }
+ }
+
+ public void LogCritical()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.CRITICAL))
+ {
+ TypesToLog.Add(ELogType.CRITICAL);
+ }
+ }
+
+ public void LogTraffic()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.TRAFFIC))
+ {
+ TypesToLog.Add(ELogType.TRAFFIC);
+ }
+ }
+
+ public void LogTrace()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.TRACE))
+ {
+ TypesToLog.Add(ELogType.TRACE);
+ }
+ }
+
+ public void LogDebug()
+ {
+ if (TypesToLog == null)
+ {
+ TypesToLog = new List();
+ }
+
+ if (!TypesToLog.Contains(ELogType.DEBUG))
+ {
+ TypesToLog.Add(ELogType.DEBUG);
+ }
+ }
}
\ No newline at end of file
diff --git a/EonaCat.Logger/Servers/GrayLog/Graylog.cs b/EonaCat.Logger/Servers/GrayLog/Graylog.cs
index c08a103..bba57e7 100644
--- a/EonaCat.Logger/Servers/GrayLog/Graylog.cs
+++ b/EonaCat.Logger/Servers/GrayLog/Graylog.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net.Sockets;
namespace EonaCat.Logger.Servers.GrayLog;
@@ -21,10 +22,20 @@ public class Graylog : IDisposable
public Graylog() { }
- public Graylog(string hostname = "127.0.0.1", int port = 12201, string nickName = null)
+ ///
+ /// Graylog server
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Graylog(string hostname = "127.0.0.1", int port = 12201, string nickName = null, List typesToLog = null)
{
_Hostname = hostname ?? throw new ArgumentNullException(nameof(hostname));
_Port = port >= 0 ? port : throw new ArgumentException("Port must be zero or greater.");
+ TypesToLog = typesToLog;
Nickname = nickName ?? IpPort;
SetUdp();
@@ -56,17 +67,38 @@ public class Graylog : IDisposable
}
}
- private void SetUdp()
+ public List TypesToLog { get; set; }
+ public bool IsConnected { get; set; }
+
+ internal void SetUdp()
{
- DisposeUdp();
- Udp = new UdpClient(_Hostname, _Port);
+ try
+ {
+ DisposeUdp();
+ Udp = new UdpClient(_Hostname, _Port);
+ IsConnected = true;
+ }
+ catch
+ {
+ IsConnected = false;
+ }
}
- private void DisposeUdp()
+ internal void DisposeUdp()
{
if (Udp != null)
{
- Udp.Dispose();
+ IsConnected = false;
+
+ try
+ {
+ Udp?.Close();
+ Udp.Dispose();
+ }
+ catch
+ {
+ // Do nothing
+ }
Udp = null;
}
}
diff --git a/EonaCat.Logger/Servers/Splunk/Splunk.cs b/EonaCat.Logger/Servers/Splunk/Splunk.cs
index 2308fe3..31bfdb8 100644
--- a/EonaCat.Logger/Servers/Splunk/Splunk.cs
+++ b/EonaCat.Logger/Servers/Splunk/Splunk.cs
@@ -1,8 +1,4 @@
-using System;
-using System.Net.Http;
-using System.Text;
-using System.Threading.Tasks;
-using EonaCat.Json;
+using EonaCat.Json;
namespace EonaCat.Logger.Servers.Splunk;
@@ -14,6 +10,7 @@ using EonaCat.Logger.Servers.Splunk.Models;
/// Splunk Server.
///
using System;
+using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
@@ -33,13 +30,23 @@ public class Splunk : IDisposable
public bool IsHttpsHecUrl => HasHecUrl && _splunkHecUrl.ToLower().StartsWith("https");
public bool IsLocalHost => HasHecUrl && (_splunkHecUrl.ToLower().Contains("127.0.0.1") || _splunkHecUrl.ToLower().Contains("localhost"));
- public Splunk(string splunkHecUrl, string splunkHecToken, HttpClientHandler httpClientHandler = null, string nickName = null)
+ ///
+ /// Splunk Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Splunk(string splunkHecUrl, string splunkHecToken, HttpClientHandler httpClientHandler = null, string nickName = null, List typesToLog = null)
{
SplunkHecUrl = splunkHecUrl ?? throw new ArgumentNullException(nameof(splunkHecUrl));
SplunkHecToken = splunkHecToken ?? throw new ArgumentNullException(nameof(splunkHecToken));
Nickname = nickName ?? $"{splunkHecUrl}_{splunkHecToken}";
SplunkClientHandler = httpClientHandler ?? new HttpClientHandler();
+ TypesToLog = typesToLog;
CreateHttpClient();
}
@@ -59,6 +66,8 @@ public class Splunk : IDisposable
}
}
+ public List TypesToLog { get; set; }
+
private void CreateHttpClient()
{
DisposeHttpClient();
@@ -84,7 +93,7 @@ public class Splunk : IDisposable
CreateHttpClient();
}
- public async Task SendAsync(SplunkPayload splunkPayload)
+ public async Task SendAsync(SplunkPayload splunkPayload, bool disableSplunkSSL = false)
{
if (splunkPayload == null) return null;
@@ -95,6 +104,16 @@ public class Splunk : IDisposable
host = splunkPayload.Host
};
+ if (disableSplunkSSL)
+ {
+ DisableSSLValidation();
+ }
+
+ if (HttpClient == null)
+ {
+ CreateHttpClient();
+ }
+
var eventJson = JsonHelper.ToJson(eventObject);
if (!HasHecToken) CreateHttpClient();
@@ -102,7 +121,7 @@ public class Splunk : IDisposable
return await HttpClient.PostAsync("/services/collector/event", content);
}
- private void DisposeHttpClient()
+ internal void DisposeHttpClient()
{
if (HttpClient != null)
{
diff --git a/EonaCat.Logger/Servers/Syslog/Syslog.cs b/EonaCat.Logger/Servers/Syslog/Syslog.cs
index f9f3a7d..4092bda 100644
--- a/EonaCat.Logger/Servers/Syslog/Syslog.cs
+++ b/EonaCat.Logger/Servers/Syslog/Syslog.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net.Sockets;
namespace EonaCat.Logger.Servers.Syslog;
@@ -12,17 +13,29 @@ public class Syslog : IDisposable
{
private string _Hostname = "127.0.0.1";
private int _Port = 514;
- private bool IsConnected { get; set; }
+ public bool IsConnected { get; private set; }
internal UdpClient Udp;
public Syslog() { }
- public Syslog(string hostname = "127.0.0.1", int port = 514, string nickName = null)
+ ///
+ /// Syslog server
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Syslog(string hostname = "127.0.0.1", int port = 514, string nickName = null, List typesToLog = null, bool convertToRfc5424 = false, bool convertToRfc3164 = false)
{
Hostname = hostname;
Port = port;
Nickname = nickName ?? IpPort;
+ TypesToLog = typesToLog;
+ ConvertToRfc5424 = convertToRfc5424;
+ ConvertToRfc3164 = convertToRfc3164;
}
public string Hostname
@@ -54,8 +67,11 @@ public class Syslog : IDisposable
public string IpPort => _Hostname + ":" + _Port;
public bool SupportsTcp { get; set; }
public string Nickname { get; set; }
+ public List TypesToLog { get; set; }
+ public bool ConvertToRfc5424 { get; set; }
+ public bool ConvertToRfc3164 { get; set; }
- private void SetUdp()
+ internal void SetUdp()
{
try
{
@@ -69,12 +85,21 @@ public class Syslog : IDisposable
}
}
- private void DisposeUdp()
+ internal void DisposeUdp()
{
if (Udp != null)
{
IsConnected = false;
- Udp.Dispose();
+
+ try
+ {
+ Udp?.Close();
+ Udp.Dispose();
+ }
+ catch
+ {
+ // Do nothing
+ }
Udp = null;
}
}
diff --git a/EonaCat.Logger/Servers/Tcp/Tcp.cs b/EonaCat.Logger/Servers/Tcp/Tcp.cs
index 7c4845c..e632f07 100644
--- a/EonaCat.Logger/Servers/Tcp/Tcp.cs
+++ b/EonaCat.Logger/Servers/Tcp/Tcp.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
@@ -12,16 +13,27 @@ namespace EonaCat.Logger.Servers.Tcp
private int _Port = 514;
internal TcpClient _tcp;
- private bool IsConnected { get; set; }
+ public bool IsConnected { get; private set; }
public string Nickname { get; set; }
public string IpPort => _Hostname + ":" + _Port;
- public Tcp(string hostname, int port, string nickname = null)
+ ///
+ /// Tcp Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Tcp(string hostname, int port, string nickname = null, List typesToLog = null)
{
_Hostname = hostname ?? throw new ArgumentNullException(nameof(hostname));
_Port = port >= 0 ? port : throw new ArgumentException("Port must be zero or greater.");
Nickname = nickname ?? IpPort;
+ TypesToLog = typesToLog;
+
SetTcp();
}
@@ -51,6 +63,8 @@ namespace EonaCat.Logger.Servers.Tcp
}
}
+ public List TypesToLog { get; set; }
+
internal void SetTcp()
{
try
@@ -59,7 +73,7 @@ namespace EonaCat.Logger.Servers.Tcp
_tcp = new TcpClient(_Hostname, _Port);
IsConnected = true;
}
- catch
+ catch
{
IsConnected = false;
}
@@ -70,9 +84,17 @@ namespace EonaCat.Logger.Servers.Tcp
if (_tcp != null)
{
IsConnected = false;
- _tcp.Close();
- _tcp.Dispose();
- _tcp = null;
+
+ try
+ {
+ _tcp.Close();
+ _tcp.Dispose();
+ _tcp = null;
+ }
+ catch
+ {
+ // Do nothing
+ }
}
}
@@ -125,7 +147,7 @@ namespace EonaCat.Logger.Servers.Tcp
}
if (IsConnected)
- {
+ {
var sendData = Encoding.UTF8.GetBytes(data);
using var stream = _tcp.GetStream();
await stream.WriteAsync(sendData, 0, sendData.Length);
diff --git a/EonaCat.Logger/Servers/Udp/Udp.cs b/EonaCat.Logger/Servers/Udp/Udp.cs
index 6234e98..07eb72d 100644
--- a/EonaCat.Logger/Servers/Udp/Udp.cs
+++ b/EonaCat.Logger/Servers/Udp/Udp.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
@@ -13,15 +14,24 @@ namespace EonaCat.Logger.Servers.Udp
private int _Port = 514;
internal UdpClient _udp;
- private bool IsConnected { get; set; }
+ public bool IsConnected { get; private set; }
public string Nickname { get; set; }
public string IpPort => _Hostname + ":" + _Port;
- public Udp(string hostname, int port, string nickname = null)
+ ///
+ /// Udp Server
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Udp(string hostname, int port, string nickname = null, List typesToLog = null)
{
_Hostname = hostname ?? throw new ArgumentNullException(nameof(hostname));
_Port = port >= 0 ? port : throw new ArgumentException("Port must be zero or greater.");
-
+ TypesToLog = typesToLog;
Nickname = nickname ?? IpPort;
SetUdp();
}
@@ -52,6 +62,8 @@ namespace EonaCat.Logger.Servers.Udp
}
}
+ public List TypesToLog { get; set; }
+
internal void SetUdp()
{
try
@@ -71,7 +83,16 @@ namespace EonaCat.Logger.Servers.Udp
if (_udp != null)
{
IsConnected = false;
- _udp.Dispose();
+
+ try
+ {
+ _udp?.Close();
+ _udp.Dispose();
+ }
+ catch
+ {
+ // Do nothing
+ }
_udp = null;
}
}
diff --git a/EonaCat.Logger/Servers/Zabbix/API/ZabbixApi.cs b/EonaCat.Logger/Servers/Zabbix/API/ZabbixApi.cs
index fdb64e3..297c811 100644
--- a/EonaCat.Logger/Servers/Zabbix/API/ZabbixApi.cs
+++ b/EonaCat.Logger/Servers/Zabbix/API/ZabbixApi.cs
@@ -11,6 +11,13 @@ namespace EonaCat.Logger.Servers.Zabbix.API;
public class ZabbixApi
{
+ ///
+ /// Zabbix Api
+ ///
+ ///
+ ///
+ ///
+ ///
public ZabbixApi(string user, string password, string zabbixURL, bool basicAuth)
{
_user = user;
diff --git a/EonaCat.Logger/Servers/Zabbix/ZabbixRequest.cs b/EonaCat.Logger/Servers/Zabbix/ZabbixRequest.cs
index 0b13e48..1ee70a2 100644
--- a/EonaCat.Logger/Servers/Zabbix/ZabbixRequest.cs
+++ b/EonaCat.Logger/Servers/Zabbix/ZabbixRequest.cs
@@ -22,6 +22,12 @@ namespace EonaCat.Logger.Servers.Zabbix
///
public ZabbixData[] Data { get; set; }
+ ///
+ /// Zabbix request
+ ///
+ ///
+ ///
+ ///
public ZabbixRequest(string host, string key, string value)
{
Request = "sender data";
diff --git a/Testers/EonaCat.Logger.Test.Web/Logger.cs b/Testers/EonaCat.Logger.Test.Web/Logger.cs
index bf9390d..2ab94db 100644
--- a/Testers/EonaCat.Logger.Test.Web/Logger.cs
+++ b/Testers/EonaCat.Logger.Test.Web/Logger.cs
@@ -8,22 +8,29 @@ namespace EonaCat.Logger.Test.Web;
public class Logger
{
private LogManager _logManager;
- public ELogType MaxLogType { get; set; }
+ public List TypesToLog { get; set; } = new List();
public LoggerSettings LoggerSettings { get; }
public bool UseLocalTime { get; set; }
public string LogFolder { get; set; } = Path.Combine(FileLoggerOptions.DefaultPath, "logs");
public string CurrentLogFile => _logManager.CurrentLogFile;
public bool IsDisabled { get; set; }
- public Logger(string name = "EonaCatTestLogger", ELogType maxLogType = ELogType.INFO, bool useLocalTime = false, int maxFileSize = 20_000_000)
+ ///
+ /// Logger
+ ///
+ ///
+ ///
+ ///
+ ///
+ public Logger(string name = "EonaCatTestLogger", List typesToLog = null, bool useLocalTime = false, int maxFileSize = 20_000_000)
{
UseLocalTime = useLocalTime;
- MaxLogType = maxLogType;
+ TypesToLog = typesToLog;
LoggerSettings = new LoggerSettings
{
Id = name,
- MaxLogType = MaxLogType,
+ TypesToLog = TypesToLog,
UseLocalTime = UseLocalTime,
FileLoggerOptions =
{
@@ -129,7 +136,7 @@ public class Logger
return;
}
- if (ELogType.ERROR <= MaxLogType)
+ if (TypesToLog.Contains(ELogType.ERROR))
{
await _logManager.WriteAsync(exception, message, writeToConsole: writeToConsole).ConfigureAwait(false);
}
diff --git a/Testers/EonaCat.Logger.Test.Web/Program.cs b/Testers/EonaCat.Logger.Test.Web/Program.cs
index ba8b999..c869bff 100644
--- a/Testers/EonaCat.Logger.Test.Web/Program.cs
+++ b/Testers/EonaCat.Logger.Test.Web/Program.cs
@@ -18,7 +18,13 @@ var defaultColor = Console.ForegroundColor;
// Add services to the container.
Logger logger = new Logger();
logger.UseLocalTime = true;
-logger.MaxLogType = ELogType.TRACE;
+logger.TypesToLog.Add(ELogType.INFO);
+logger.TypesToLog.Add(ELogType.WARNING);
+logger.TypesToLog.Add(ELogType.ERROR);
+logger.TypesToLog.Add(ELogType.CRITICAL);
+logger.TypesToLog.Add(ELogType.DEBUG);
+logger.TypesToLog.Add(ELogType.TRACE);
+logger.TypesToLog.Add(ELogType.TRAFFIC);
logger.LoggerSettings.OnLog += LoggerSettings_OnLog;
logger.LoggerSettings.UseMask = true;
@@ -119,7 +125,7 @@ void RunLoggingExceptionTests()
var loggerSettings = new LoggerSettings();
loggerSettings.FileLoggerOptions.UseLocalTime = true;
loggerSettings.UseLocalTime = true;
- loggerSettings.MaxLogType = ELogType.INFO;
+ loggerSettings.TypesToLog.Add(ELogType.INFO);
var logger = new LogManager(loggerSettings);
for (var i = 0; i < 10; i++)
@@ -215,7 +221,18 @@ async Task RunLoggingTestsAsync()
var loggerSettings = new LoggerSettings();
loggerSettings.UseLocalTime = true;
loggerSettings.FileLoggerOptions.UseLocalTime = true;
- loggerSettings.MaxLogType = ELogType.DEBUG;
+ loggerSettings.TypesToLog.Add(ELogType.INFO);
+ loggerSettings.TypesToLog.Add(ELogType.WARNING);
+ loggerSettings.TypesToLog.Add(ELogType.ERROR);
+ loggerSettings.TypesToLog.Add(ELogType.TRAFFIC);
+ loggerSettings.TypesToLog.Add(ELogType.DEBUG);
+ loggerSettings.LogDebug();
+ loggerSettings.LogInfo();
+ loggerSettings.LogWarning();
+ loggerSettings.LogError();
+ loggerSettings.LogCritical();
+ loggerSettings.LogTrace();
+ loggerSettings.LogTraffic();
loggerSettings.FileLoggerOptions.FileSizeLimit = 1024 * 1024 * 1;
loggerSettings.FileLoggerOptions.FileNamePrefix = "AllTypes";
loggerSettings.FileLoggerOptions.MaxRolloverFiles = 5;