From fce9a79d66136f36bc70b7791e53ca435f6db645 Mon Sep 17 00:00:00 2001 From: NextTurn <45985406+NextTurn@users.noreply.github.com> Date: Fri, 31 Jan 2020 00:00:00 +0800 Subject: [PATCH] Fix stdout/stderr redirection when log disabled --- src/Core/WinSWCore/LogAppenders.cs | 73 +++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 22 deletions(-) diff --git a/src/Core/WinSWCore/LogAppenders.cs b/src/Core/WinSWCore/LogAppenders.cs index c477e89..9f43f7b 100644 --- a/src/Core/WinSWCore/LogAppenders.cs +++ b/src/Core/WinSWCore/LogAppenders.cs @@ -86,7 +86,32 @@ namespace winsw ErrFilePattern = errFilePattern; } + public override void log(StreamReader outputReader, StreamReader errorReader) + { + if (this.OutFileDisabled) + { + outputReader.Dispose(); + } + else + { + this.LogOutput(outputReader); + } + + if (this.ErrFileDisabled) + { + errorReader.Dispose(); + } + else + { + this.LogError(errorReader); + } + } + protected StreamWriter CreateWriter(FileStream stream) => new StreamWriter(stream) { AutoFlush = true }; + + protected abstract void LogOutput(StreamReader outputReader); + + protected abstract void LogError(StreamReader errorReader); } public abstract class SimpleLogAppender : AbstractFileLogAppender @@ -103,13 +128,14 @@ namespace winsw ErrorLogFileName = BaseLogFileName + ".err.log"; } - public override void log(StreamReader outputReader, StreamReader errorReader) + protected override void LogOutput(StreamReader outputReader) { - if (!OutFileDisabled) - new Thread(() => CopyStream(outputReader, CreateWriter(new FileStream(OutputLogFileName, FileMode)))).Start(); + new Thread(() => CopyStream(outputReader, CreateWriter(new FileStream(OutputLogFileName, FileMode)))).Start(); + } - if (!ErrFileDisabled) - new Thread(() => CopyStream(errorReader, CreateWriter(new FileStream(ErrorLogFileName, FileMode)))).Start(); + protected override void LogError(StreamReader errorReader) + { + new Thread(() => CopyStream(errorReader, CreateWriter(new FileStream(ErrorLogFileName, FileMode)))).Start(); } } @@ -136,8 +162,8 @@ namespace winsw { public override void log(StreamReader outputReader, StreamReader errorReader) { - new Thread(() => CopyStream(outputReader, StreamWriter.Null)).Start(); - new Thread(() => CopyStream(errorReader, StreamWriter.Null)).Start(); + outputReader.Dispose(); + errorReader.Dispose(); } } @@ -153,13 +179,14 @@ namespace winsw Period = period; } - public override void log(StreamReader outputReader, StreamReader errorReader) + protected override void LogOutput(StreamReader outputReader) { - if (!OutFileDisabled) - new Thread(() => CopyStreamWithDateRotation(outputReader, OutFilePattern)).Start(); + new Thread(() => CopyStreamWithDateRotation(outputReader, OutFilePattern)).Start(); + } - if (!ErrFileDisabled) - new Thread(() => CopyStreamWithDateRotation(errorReader, ErrFilePattern)).Start(); + protected override void LogError(StreamReader errorReader) + { + new Thread(() => CopyStreamWithDateRotation(errorReader, ErrFilePattern)).Start(); } /// @@ -213,13 +240,14 @@ namespace winsw public SizeBasedRollingLogAppender(string logDirectory, string baseName, bool outFileDisabled, bool errFileDisabled, string outFilePattern, string errFilePattern) : this(logDirectory, baseName, outFileDisabled, errFileDisabled, outFilePattern, errFilePattern, DEFAULT_SIZE_THRESHOLD, DEFAULT_FILES_TO_KEEP) { } - public override void log(StreamReader outputReader, StreamReader errorReader) + protected override void LogOutput(StreamReader outputReader) { - if (!OutFileDisabled) - new Thread(() => CopyStreamWithRotation(outputReader, OutFilePattern)).Start(); + new Thread(() => CopyStreamWithRotation(outputReader, OutFilePattern)).Start(); + } - if (!ErrFileDisabled) - new Thread(() => CopyStreamWithRotation(errorReader, ErrFilePattern)).Start(); + protected override void LogError(StreamReader errorReader) + { + new Thread(() => CopyStreamWithRotation(errorReader, ErrFilePattern)).Start(); } /// @@ -325,13 +353,14 @@ namespace winsw ZipDateFormat = zipdateformat; } - public override void log(StreamReader outputReader, StreamReader errorReader) + protected override void LogOutput(StreamReader outputReader) { - if (!OutFileDisabled) - new Thread(() => CopyStreamWithRotation(outputReader, OutFilePattern)).Start(); + new Thread(() => CopyStreamWithRotation(outputReader, OutFilePattern)).Start(); + } - if (!ErrFileDisabled) - new Thread(() => CopyStreamWithRotation(errorReader, ErrFilePattern)).Start(); + protected override void LogError(StreamReader errorReader) + { + new Thread(() => CopyStreamWithRotation(errorReader, ErrFilePattern)).Start(); } private void CopyStreamWithRotation(StreamReader reader, string extension)