public static string InstrumentedDownload(this WebRequest request, Func <WebRequest, String> downloader) { var stopwatch = Stopwatch.StartNew(); var url = request.RequestUri.AbsoluteUri; Logger.LogDebug("Download", nameof(url), url, "Proxy", request.GetProxyString()); try { var result = downloader(request); var kbytes = Convert.ToInt32(result.Length / 1024); stopwatch.Stop(); Logger.LogInfo("Download", "KBytes", kbytes, "Result", true, "ElapsedMs", stopwatch.ElapsedMilliseconds); return(result); } catch (WebException e) { stopwatch.Stop(); Logger.LogError("Download Error", e, nameof(url), url, "ElapsedMs", stopwatch.ElapsedMilliseconds); throw; } }
private void CheckDeadlock() { double inactivityPeriodMs; lock (_statusLock) { inactivityPeriodMs = (DateTime.UtcNow - _lastStatus).TotalMilliseconds; } if (inactivityPeriodMs > TimeoutMs) { Logger.LogError("Deadlock Detected", nameof(TimeoutMs), TimeoutMs, nameof(inactivityPeriodMs), inactivityPeriodMs); AbortProgram(); } }
private void LogUnhandledException(object sender, UnhandledExceptionEventArgs args) { Logger.LogError("App Domain Unhandled Exception", args.ExceptionObject, "IsTerminating", args.IsTerminating); }