From 6b227c7ecf1486b0600d45342d8cda8f26eb0a0a Mon Sep 17 00:00:00 2001 From: Adam Ralph Date: Mon, 28 Apr 2014 02:45:46 +0200 Subject: [PATCH 1/3] adds a -logfile switch for mirroring all console messages to a file --- src/ScriptCs.Hosting/FileLoggerConsole.cs | 80 ++++++++++++++++++++ src/ScriptCs.Hosting/ScriptCs.Hosting.csproj | 1 + src/ScriptCs/Program.cs | 8 +- src/ScriptCs/ScriptCsArgs.cs | 3 + 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 src/ScriptCs.Hosting/FileLoggerConsole.cs diff --git a/src/ScriptCs.Hosting/FileLoggerConsole.cs b/src/ScriptCs.Hosting/FileLoggerConsole.cs new file mode 100644 index 00000000..30e04c85 --- /dev/null +++ b/src/ScriptCs.Hosting/FileLoggerConsole.cs @@ -0,0 +1,80 @@ +using System; +using System.IO; +using ScriptCs.Contracts; + +namespace ScriptCs.Hosting +{ + public class FileLoggerConsole : IConsole + { + private readonly string _path; + private readonly IConsole _innerConsole; + + public FileLoggerConsole(string path, IConsole innerConsole) + { + Guard.AgainstNullArgument("innerConsole", innerConsole); + + _path = path; + _innerConsole = innerConsole; + } + + public void Write(string value) + { + _innerConsole.Write(value); + this.Append(value); + } + + public void WriteLine() + { + _innerConsole.WriteLine(); + this.AppendLine(string.Empty); + } + + public void WriteLine(string value) + { + _innerConsole.WriteLine(value); + this.AppendLine(value); + } + + public string ReadLine() + { + var line = _innerConsole.ReadLine(); + this.AppendLine(line); + return line; + } + + public void Clear() + { + _innerConsole.Clear(); + } + + public void Exit() + { + _innerConsole.Exit(); + } + + public void ResetColor() + { + _innerConsole.ResetColor(); + } + + public ConsoleColor ForegroundColor + { + get { return _innerConsole.ForegroundColor; } + set { _innerConsole.ForegroundColor = value; } + } + + private void Append(string text) + { + using (var writer = new StreamWriter(_path, true)) + { + writer.Write(text); + writer.Flush(); + } + } + + private void AppendLine(string text) + { + this.Append(text + Environment.NewLine); + } + } +} \ No newline at end of file diff --git a/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj b/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj index f3896106..55c76d4f 100644 --- a/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj +++ b/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj @@ -79,6 +79,7 @@ Guard.cs + diff --git a/src/ScriptCs/Program.cs b/src/ScriptCs/Program.cs index f9e3e593..c837b7d7 100644 --- a/src/ScriptCs/Program.cs +++ b/src/ScriptCs/Program.cs @@ -3,6 +3,7 @@ using System.Runtime; using ScriptCs.Argument; using ScriptCs.Command; +using ScriptCs.Contracts; using ScriptCs.Hosting; namespace ScriptCs @@ -19,7 +20,7 @@ private static int Main(string[] args) } #endif - var console = new ScriptConsole(); + IConsole console = new ScriptConsole(); var parser = new ArgumentHandler(new ArgumentParser(console), new ConfigFileParser(console), new FileSystem()); var arguments = parser.Parse(args); @@ -27,6 +28,11 @@ private static int Main(string[] args) var commandArgs = arguments.CommandArguments; var scriptArgs = arguments.ScriptArguments; + if (!string.IsNullOrWhiteSpace(commandArgs.LogFile)) + { + console = new FileLoggerConsole(commandArgs.LogFile, console); + } + var configurator = new LoggerConfigurator(commandArgs.LogLevel); configurator.Configure(console); var logger = configurator.GetLogger(); diff --git a/src/ScriptCs/ScriptCsArgs.cs b/src/ScriptCs/ScriptCsArgs.cs index 0a4cf011..e2fb6540 100644 --- a/src/ScriptCs/ScriptCsArgs.cs +++ b/src/ScriptCs/ScriptCsArgs.cs @@ -69,5 +69,8 @@ public ScriptCsArgs() [ArgDescription("Defines the version of the package to install. Used in conjunction with -install")] public string PackageVersion { get; set; } + [ArgShortcut("logfile")] + [ArgDescription("Logs all console output to the specified file")] + public string LogFile { get; set; } } } \ No newline at end of file From 823677c0b60bab4b2f0ddcc7b2ee1da151b8d972 Mon Sep 17 00:00:00 2001 From: Adam Ralph Date: Mon, 5 May 2014 09:47:12 +0200 Subject: [PATCH 2/3] #656 changed from -logfile to -output --- .../{FileLoggerConsole.cs => FileConsole.cs} | 4 ++-- src/ScriptCs.Hosting/ScriptCs.Hosting.csproj | 5 ++--- src/ScriptCs/Program.cs | 4 ++-- src/ScriptCs/ScriptCsArgs.cs | 6 +++--- 4 files changed, 9 insertions(+), 10 deletions(-) rename src/ScriptCs.Hosting/{FileLoggerConsole.cs => FileConsole.cs} (93%) diff --git a/src/ScriptCs.Hosting/FileLoggerConsole.cs b/src/ScriptCs.Hosting/FileConsole.cs similarity index 93% rename from src/ScriptCs.Hosting/FileLoggerConsole.cs rename to src/ScriptCs.Hosting/FileConsole.cs index 30e04c85..dbac0953 100644 --- a/src/ScriptCs.Hosting/FileLoggerConsole.cs +++ b/src/ScriptCs.Hosting/FileConsole.cs @@ -4,12 +4,12 @@ namespace ScriptCs.Hosting { - public class FileLoggerConsole : IConsole + public class FileConsole : IConsole { private readonly string _path; private readonly IConsole _innerConsole; - public FileLoggerConsole(string path, IConsole innerConsole) + public FileConsole(string path, IConsole innerConsole) { Guard.AgainstNullArgument("innerConsole", innerConsole); diff --git a/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj b/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj index 55c76d4f..02d58d20 100644 --- a/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj +++ b/src/ScriptCs.Hosting/ScriptCs.Hosting.csproj @@ -1,7 +1,6 @@  - + Debug AnyCPU @@ -79,7 +78,7 @@ Guard.cs - + diff --git a/src/ScriptCs/Program.cs b/src/ScriptCs/Program.cs index c837b7d7..4ff2ec14 100644 --- a/src/ScriptCs/Program.cs +++ b/src/ScriptCs/Program.cs @@ -28,9 +28,9 @@ private static int Main(string[] args) var commandArgs = arguments.CommandArguments; var scriptArgs = arguments.ScriptArguments; - if (!string.IsNullOrWhiteSpace(commandArgs.LogFile)) + if (!string.IsNullOrWhiteSpace(commandArgs.Output)) { - console = new FileLoggerConsole(commandArgs.LogFile, console); + console = new FileConsole(commandArgs.Output, console); } var configurator = new LoggerConfigurator(commandArgs.LogLevel); diff --git a/src/ScriptCs/ScriptCsArgs.cs b/src/ScriptCs/ScriptCsArgs.cs index e2fb6540..c3aa2bf4 100644 --- a/src/ScriptCs/ScriptCsArgs.cs +++ b/src/ScriptCs/ScriptCsArgs.cs @@ -69,8 +69,8 @@ public ScriptCsArgs() [ArgDescription("Defines the version of the package to install. Used in conjunction with -install")] public string PackageVersion { get; set; } - [ArgShortcut("logfile")] - [ArgDescription("Logs all console output to the specified file")] - public string LogFile { get; set; } + [ArgShortcut("output")] + [ArgDescription("Write all console output to the specified file")] + public string Output { get; set; } } } \ No newline at end of file From fdf65f68ed0900d75b7c716c9bc7fca69ae3eb54 Mon Sep 17 00:00:00 2001 From: Adam Ralph Date: Mon, 5 May 2014 16:12:11 +0200 Subject: [PATCH 3/3] #656 removed duplicate arg shortcut to please PowerArgs 2.x --- src/ScriptCs/ScriptCsArgs.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ScriptCs/ScriptCsArgs.cs b/src/ScriptCs/ScriptCsArgs.cs index c3aa2bf4..83c3ba03 100644 --- a/src/ScriptCs/ScriptCsArgs.cs +++ b/src/ScriptCs/ScriptCsArgs.cs @@ -69,7 +69,6 @@ public ScriptCsArgs() [ArgDescription("Defines the version of the package to install. Used in conjunction with -install")] public string PackageVersion { get; set; } - [ArgShortcut("output")] [ArgDescription("Write all console output to the specified file")] public string Output { get; set; } }