diff --git a/src/Seq.Client.EventLog/App.config b/src/Seq.Client.EventLog/App.config index 8be79e9..b3c9fe8 100644 --- a/src/Seq.Client.EventLog/App.config +++ b/src/Seq.Client.EventLog/App.config @@ -14,6 +14,8 @@ + + diff --git a/src/Seq.Client.EventLog/Config.cs b/src/Seq.Client.EventLog/Config.cs index 6278333..f8f29a3 100644 --- a/src/Seq.Client.EventLog/Config.cs +++ b/src/Seq.Client.EventLog/Config.cs @@ -15,6 +15,7 @@ static Config() LogToFile = GetBool(ConfigurationManager.AppSettings["LogSeqApiKey"], true); LogFolder = ConfigurationManager.AppSettings["LogFolder"]; HeartbeatInterval = GetInt(ConfigurationManager.AppSettings["HeartbeatInterval"]); + HeartbeatsBeforeReset = GetInt(ConfigurationManager.AppSettings["HeartbeatsBeforeReset"]); //Minimum is 0 (disabled) if (HeartbeatInterval < 0) @@ -23,6 +24,9 @@ static Config() if (HeartbeatInterval > 3600) HeartbeatInterval = 3600; + if (HeartbeatsBeforeReset < 0) + HeartbeatsBeforeReset = 0; + IsDebug = GetBool(ConfigurationManager.AppSettings["IsDebug"]); var isSuccess = true; @@ -65,6 +69,7 @@ static Config() public static string LogFolder { get; } public static int HeartbeatInterval { get; } public static bool IsDebug { get; } + public static int HeartbeatsBeforeReset { get; } /// /// Convert the supplied to an diff --git a/src/Seq.Client.EventLog/Seq.Client.EventLog.csproj b/src/Seq.Client.EventLog/Seq.Client.EventLog.csproj index 28e8bf7..dea35f3 100644 --- a/src/Seq.Client.EventLog/Seq.Client.EventLog.csproj +++ b/src/Seq.Client.EventLog/Seq.Client.EventLog.csproj @@ -35,7 +35,7 @@ - 3.0.3 + 3.0.4 Connor O'Shea and contributors Connor O'Shea EventLog.ico diff --git a/src/Seq.Client.EventLog/ServiceManager.cs b/src/Seq.Client.EventLog/ServiceManager.cs index 0a408be..cce5101 100644 --- a/src/Seq.Client.EventLog/ServiceManager.cs +++ b/src/Seq.Client.EventLog/ServiceManager.cs @@ -2,9 +2,12 @@ using System.Collections.Generic; using System.IO; using System.Reflection; +using System.Threading; +using System.Threading.Tasks; using System.Timers; using Lurgle.Logging; using Newtonsoft.Json; +using Timer = System.Timers.Timer; // ReSharper disable MemberCanBePrivate.Global @@ -33,6 +36,7 @@ public static class ServiceManager public static string JsonConfigPath { get; set; } public static List EventLogListeners { get; set; } + private static int ZeroLogHeartbeats { get; set; } = 0; public static void Start(bool isInteractive) { @@ -145,6 +149,26 @@ private static void ServiceHeartbeat(object sender, ElapsedEventArgs e) serviceCounters.Add("NonInteractiveLogons", NonInteractiveLogons); } + if (Config.HeartbeatsBeforeReset > 0) + { + if (EventsProcessed > LastProcessed) + ZeroLogHeartbeats = 0; + else + ZeroLogHeartbeats++; + + if (ZeroLogHeartbeats > Config.HeartbeatsBeforeReset) + { + Log.Warning().AddProperty("HeartbeatName", $"{Config.AppName} Heartbeat") + .AddProperty("HeartbeatCount", ZeroLogHeartbeats) + .AddProperty("NextTime", timeNow.AddMilliseconds(_isInteractive ? 60000 : Config.HeartbeatInterval * 1000)) + .Add("[{HeartbeatName:l} - {MachineName:l}] - Detected that new no log entries have been seen in the past {Heartbeats} heartbeats, resetting listeners ..."); + + StopListeners(); + Thread.Sleep(1000); + StartListeners(_isInteractive); + } + } + Log.Debug() .AddProperty("HeartbeatName", $"{Config.AppName} Heartbeat") .AddProperty(serviceCounters)