static void Execute(Parameters parameters) { string line; StreamWriter output = null; var buffer = new StringBuilder(); var logstart = parameters.LogStart; var rotation = GetRotationInfo(parameters); Logger.Info("Log rotation started."); Logger.Debug($"Input Encoding: {Console.InputEncoding.EncodingName}"); Logger.Debug($"Full Destination Path: {rotation.FullPath}"); Logger.Debug($"Destination Directory: {rotation.Directory}"); Logger.Debug($"Log File Name: {rotation.Name}"); Logger.Debug($"Log File Extension: {rotation.Extension}"); Logger.Debug($"Log entries start with: '{logstart.ToString().Substring(1)}'"); Logger.Debug($"Maximum File Size (bytes): {parameters.FileSize}"); try { output = Open(parameters); while ((line = Console.In.ReadLine()) != null) { if (line.Length == 0) { continue; } if (output.BaseStream.Length > parameters.FileSize) { output.Dispose(); Rotate(parameters, rotation); output = Open(parameters); } if (logstart.IsMatch(line)) { output.Write(buffer); output.Flush(); buffer.Clear(); } buffer.Append(line + Environment.NewLine); } output.Write(buffer); } finally { output?.Dispose(); } }