private bool TryGetNewStreamAndApplyRetentionPolicies(long maxFileSize, out FileStream fileStream) { string[] logFiles; string[] logGzFiles; try { logFiles = Directory.GetFiles(_path, "*.log"); logGzFiles = Directory.GetFiles(_path, "*.log.gz"); } catch (Exception) { // Something went wrong we will try again later fileStream = null; return(false); } Array.Sort(logFiles); Array.Sort(logGzFiles); if (DateTime.Today != _today) { _today = DateTime.Today; _dateString = LogInfo.GetFileName(DateTime.Today); _logNumber = Math.Max(NextLogNumberForExtension(logFiles, "log"), NextLogNumberForExtension(logGzFiles, "log.gz")); } UpdateLocalDateTimeOffset(); string fileName; while (true) { var nextLogNumber = Interlocked.Increment(ref _logNumber); fileName = Path.Combine(_path, _dateString) + "." + nextLogNumber.ToString("000", CultureInfo.InvariantCulture) + ".log"; if (File.Exists(fileName) == false || new FileInfo(fileName).Length < maxFileSize) { break; } } if (Compressing == false) { CleanupOldLogFiles(logFiles); LimitLogSize(logFiles); } fileStream = File.Open(fileName, FileMode.Append, FileAccess.Write, FileShare.Read); fileStream.Write(_headerRow, 0, _headerRow.Length); return(true); }