diff --git a/src/WinSW.Core/LogAppenders.cs b/src/WinSW.Core/LogAppenders.cs
index 1b0ca5a..e804c2c 100644
--- a/src/WinSW.Core/LogAppenders.cs
+++ b/src/WinSW.Core/LogAppenders.cs
@@ -25,14 +25,24 @@ namespace WinSW
///
public abstract class LogHandler
{
- public abstract void Log(StreamReader outputReader, StreamReader errorReader);
+#pragma warning disable CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable.
+ protected LogHandler(bool outFileDisabled, bool errFileDisabled)
+#pragma warning restore CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable.
+ {
+ this.OutFileDisabled = outFileDisabled;
+ this.ErrFileDisabled = errFileDisabled;
+ }
///
/// Error and information about logging should be reported here.
///
-#pragma warning disable CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable.
public IEventLogger EventLogger { get; set; }
-#pragma warning restore CS8618 // Non-nullable field is uninitialized. Consider declaring as nullable.
+
+ public bool OutFileDisabled { get; }
+
+ public bool ErrFileDisabled { get; }
+
+ public abstract void Log(StreamReader outputReader, StreamReader errorReader);
///
/// Convenience method to copy stuff from StreamReader to StreamWriter
@@ -72,39 +82,26 @@ namespace WinSW
{
protected string BaseLogFileName { get; private set; }
- protected bool OutFileDisabled { get; private set; }
-
- protected bool ErrFileDisabled { get; private set; }
-
protected string OutFilePattern { get; private set; }
protected string ErrFilePattern { get; private set; }
protected AbstractFileLogAppender(string logDirectory, string baseName, bool outFileDisabled, bool errFileDisabled, string outFilePattern, string errFilePattern)
+ : base(outFileDisabled, errFileDisabled)
{
this.BaseLogFileName = Path.Combine(logDirectory, baseName);
- this.OutFileDisabled = outFileDisabled;
this.OutFilePattern = outFilePattern;
- this.ErrFileDisabled = errFileDisabled;
this.ErrFilePattern = errFilePattern;
}
public override void Log(StreamReader outputReader, StreamReader errorReader)
{
- if (this.OutFileDisabled)
- {
- outputReader.Dispose();
- }
- else
+ if (!this.OutFileDisabled)
{
this.LogOutput(outputReader);
}
- if (this.ErrFileDisabled)
- {
- errorReader.Dispose();
- }
- else
+ if (!this.ErrFileDisabled)
{
this.LogError(errorReader);
}
@@ -165,10 +162,13 @@ namespace WinSW
///
public class IgnoreLogAppender : LogHandler
{
+ public IgnoreLogAppender()
+ : base(true, true)
+ {
+ }
+
public override void Log(StreamReader outputReader, StreamReader errorReader)
{
- outputReader.Dispose();
- errorReader.Dispose();
}
}
diff --git a/src/WinSW.Core/Util/ProcessHelper.cs b/src/WinSW.Core/Util/ProcessHelper.cs
index 47cbc53..23171c6 100644
--- a/src/WinSW.Core/Util/ProcessHelper.cs
+++ b/src/WinSW.Core/Util/ProcessHelper.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
+using System.IO;
using System.Management;
using System.Threading;
using log4net;
@@ -155,8 +156,8 @@ namespace WinSW.Util
ps.CreateNoWindow = hideWindow;
ps.UseShellExecute = false;
ps.RedirectStandardInput = redirectStdin;
- ps.RedirectStandardOutput = logHandler != null;
- ps.RedirectStandardError = logHandler != null;
+ ps.RedirectStandardOutput = logHandler?.OutFileDisabled == false;
+ ps.RedirectStandardError = logHandler?.ErrFileDisabled == false;
if (envVars != null)
{
@@ -193,7 +194,9 @@ namespace WinSW.Util
if (logHandler != null)
{
Logger.Debug("Forwarding logs of the process " + processToStart + " to " + logHandler);
- logHandler.Log(processToStart.StandardOutput, processToStart.StandardError);
+ logHandler.Log(
+ ps.RedirectStandardOutput ? processToStart.StandardOutput : StreamReader.Null,
+ ps.RedirectStandardError ? processToStart.StandardError : StreamReader.Null);
}
// monitor the completion of the process