diff --git a/src/WinSW.Core/LogAppenders.cs b/src/WinSW.Core/LogAppenders.cs index 729cf64..d018a3d 100644 --- a/src/WinSW.Core/LogAppenders.cs +++ b/src/WinSW.Core/LogAppenders.cs @@ -2,7 +2,6 @@ using System.Diagnostics; using System.IO; using System.IO.Compression; -using System.Threading; using WinSW.Util; namespace WinSW @@ -31,10 +30,10 @@ namespace WinSW /// /// Convenience method to copy stuff from StreamReader to StreamWriter /// - protected void CopyStream(StreamReader reader, StreamWriter writer) + protected async void CopyStreamAsync(StreamReader reader, StreamWriter writer) { string? line; - while ((line = reader.ReadLine()) != null) + while ((line = await reader.ReadLineAsync()) != null) { writer.WriteLine(line); } @@ -129,12 +128,12 @@ namespace WinSW protected override void LogOutput(StreamReader outputReader) { - new Thread(() => this.CopyStream(outputReader, this.CreateWriter(new FileStream(this.OutputLogFileName, this.FileMode)))).Start(); + this.CopyStreamAsync(outputReader, this.CreateWriter(new FileStream(this.OutputLogFileName, this.FileMode))); } protected override void LogError(StreamReader errorReader) { - new Thread(() => this.CopyStream(errorReader, this.CreateWriter(new FileStream(this.ErrorLogFileName, this.FileMode)))).Start(); + this.CopyStreamAsync(errorReader, this.CreateWriter(new FileStream(this.ErrorLogFileName, this.FileMode))); } } @@ -181,25 +180,25 @@ namespace WinSW protected override void LogOutput(StreamReader outputReader) { - new Thread(() => this.CopyStreamWithDateRotation(outputReader, this.OutFilePattern)).Start(); + this.CopyStreamWithDateRotationAsync(outputReader, this.OutFilePattern); } protected override void LogError(StreamReader errorReader) { - new Thread(() => this.CopyStreamWithDateRotation(errorReader, this.ErrFilePattern)).Start(); + this.CopyStreamWithDateRotationAsync(errorReader, this.ErrFilePattern); } /// /// Works like the CopyStream method but does a log rotation based on time. /// - private void CopyStreamWithDateRotation(StreamReader reader, string ext) + private async void CopyStreamWithDateRotationAsync(StreamReader reader, string ext) { PeriodicRollingCalendar periodicRollingCalendar = new PeriodicRollingCalendar(this.Pattern, this.Period); periodicRollingCalendar.Init(); StreamWriter writer = this.CreateWriter(new FileStream(this.BaseLogFileName + "_" + periodicRollingCalendar.Format + ext, FileMode.Append)); string? line; - while ((line = reader.ReadLine()) != null) + while ((line = await reader.ReadLineAsync()) != null) { if (periodicRollingCalendar.ShouldRoll) { @@ -240,24 +239,24 @@ namespace WinSW protected override void LogOutput(StreamReader outputReader) { - new Thread(() => this.CopyStreamWithRotation(outputReader, this.OutFilePattern)).Start(); + this.CopyStreamWithRotationAsync(outputReader, this.OutFilePattern); } protected override void LogError(StreamReader errorReader) { - new Thread(() => this.CopyStreamWithRotation(errorReader, this.ErrFilePattern)).Start(); + this.CopyStreamWithRotationAsync(errorReader, this.ErrFilePattern); } /// /// Works like the CopyStream method but does a log rotation. /// - private void CopyStreamWithRotation(StreamReader reader, string ext) + private async void CopyStreamWithRotationAsync(StreamReader reader, string ext) { StreamWriter writer = this.CreateWriter(new FileStream(this.BaseLogFileName + ext, FileMode.Append)); long fileLength = new FileInfo(this.BaseLogFileName + ext).Length; string? line; - while ((line = reader.ReadLine()) != null) + while ((line = await reader.ReadLineAsync()) != null) { int lengthToWrite = (line.Length + Environment.NewLine.Length) * sizeof(char); if (fileLength + lengthToWrite > this.SizeThreshold) @@ -366,15 +365,15 @@ namespace WinSW protected override void LogOutput(StreamReader outputReader) { - new Thread(() => this.CopyStreamWithRotation(outputReader, this.OutFilePattern)).Start(); + this.CopyStreamWithRotationAsync(outputReader, this.OutFilePattern); } protected override void LogError(StreamReader errorReader) { - new Thread(() => this.CopyStreamWithRotation(errorReader, this.ErrFilePattern)).Start(); + this.CopyStreamWithRotationAsync(errorReader, this.ErrFilePattern); } - private void CopyStreamWithRotation(StreamReader reader, string extension) + private async void CopyStreamWithRotationAsync(StreamReader reader, string extension) { // lock required as the timer thread and the thread that will write to the stream could try and access the file stream at the same time var fileLock = new object(); @@ -392,7 +391,7 @@ namespace WinSW // Run at start var tickTime = this.SetupRollTimer(autoRollAtTime); var timer = new System.Timers.Timer(tickTime); - timer.Elapsed += (s, e) => + timer.Elapsed += (_, _) => { try { @@ -428,7 +427,7 @@ namespace WinSW } string? line; - while ((line = reader.ReadLine()) != null) + while ((line = await reader.ReadLineAsync()) != null) { lock (fileLock) {