protected override void Handle(HttpContext context, Exception exception) { using (LockParser.Parse <ErrorLoggingFileMiddleware>().Begin()) { var now = DateTime.Now; var pathBase = "logs"; var dailyDirectory = now.ToString("yyyyMMdd"); var hourlyFile = $"{dailyDirectory}/{now.ToString("yyyyMMdd HH")}-{((now.Hour + 1) % 24).ToString("00")}.txt"; if (CheckHourlyFile != hourlyFile) { var dir = $"{pathBase}/{dailyDirectory}"; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } CheckHourlyFile = hourlyFile; _loggingFileStream?.Dispose(); _loggingWriter?.Dispose(); _loggingFileStream = new FileStream($"{pathBase}/{hourlyFile}", FileMode.Append, FileAccess.Write); _loggingWriter = new StreamWriter(_loggingFileStream); } _loggingWriter.WriteLineAsync($"{DateTime.Now}\tUrl: {context.Request.Url()}\tFrom: {context.Connection.RemoteIpAddress}"); _loggingWriter.WriteLine(exception.Message); _loggingWriter.WriteLine(exception.StackTrace); _loggingWriter.WriteLine(); _loggingWriter.Flush(); _loggingFileStream.Flush(); } }
public void Test() { var lockParser = new TypeLockParser(nameof(NStandard)); var stopwatch = new Stopwatch(); stopwatch.Start(); var result = Concurrency.Run(resultId => { using (var _lock = lockParser.Parse <TypeLockTest>().TryBegin(500)) { if (_lock.Value) { Thread.Sleep(1000); return("Entered"); } else { return("Timeout"); } } }, level: 2, threadCount: 2); stopwatch.Stop(); Assert.Equal(1, result.Values.Count(x => x == "Entered")); Assert.Equal(1, result.Values.Count(x => x == "Timeout")); Assert.True(stopwatch.ElapsedMilliseconds < 1900); }
public async Task InvokeAsync(HttpContext context) { try { await _next(context); } catch (Exception ex) { using (LockParser.Parse <ErrorLoggingFileMiddleware>().Begin()) { var now = DateTime.Now; var dailyDir = now.ToString("yyyyMMdd"); var hourlyFile = $"{dailyDir}/{now:yyyyMMdd}-{now.Hour:00}h-{(now.Hour + 1) % 24:00}h.txt"; if (CheckHourlyFile != hourlyFile) { var dir = $"{PathBase}/{dailyDir}"; if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } CheckHourlyFile = hourlyFile; _loggingWriter?.Dispose(); _loggingFileStream?.Dispose(); _loggingFileStream = new FileStream($"{PathBase}/{hourlyFile}", FileMode.Append, FileAccess.Write); _loggingWriter = new StreamWriter(_loggingFileStream); } _loggingWriter.WriteLine($"{DateTime.Now}\tUrl: {context.Request.Url()}\tFrom: {context.Connection.RemoteIpAddress}"); _loggingWriter.WriteLine(ex.Message); _loggingWriter.WriteLine(ex.StackTrace); _loggingWriter.WriteLine(); _loggingWriter.Flush(); _loggingFileStream.Flush(); } throw; } }
public void Test() { var lockParser = new TypeLockParser(nameof(NStandard)); var report = Concurrency.Run(resultId => { using var _lock = lockParser.Parse <TypeLockTest>().TryBegin(500); if (_lock.Value) { Thread.Sleep(1000); return("Entered"); } else { return("Timeout"); } }, level: 2, threadCount: 2); Assert.Equal(1, report.Results.Count(x => x.Return == "Entered")); Assert.Equal(1, report.Results.Count(x => x.Return == "Timeout")); Assert.True(report.AverageElapsed?.TotalMilliseconds < 2000); }