diff --git a/CloudWatchLogDownloader/CloudWatchLogDownloader.csproj b/CloudWatchLogDownloader/CloudWatchLogDownloader.csproj
index 0063a99..12060b4 100644
--- a/CloudWatchLogDownloader/CloudWatchLogDownloader.csproj
+++ b/CloudWatchLogDownloader/CloudWatchLogDownloader.csproj
@@ -56,6 +56,7 @@
+
diff --git a/CloudWatchLogDownloader/DebugLogger.cs b/CloudWatchLogDownloader/DebugLogger.cs
new file mode 100644
index 0000000..ec2d166
--- /dev/null
+++ b/CloudWatchLogDownloader/DebugLogger.cs
@@ -0,0 +1,87 @@
+using System;
+
+namespace CloudWatchLogDownloader
+{
+ internal static class DebugLogger
+ {
+ private static bool _debug;
+ public static bool Debug
+ {
+ get { return _debug; }
+ set
+ {
+ if (value && !_debug)
+ {
+ WriteLine("debug mode active");
+ }
+ _debug = value;
+ }
+ }
+
+ public static void Write(string str)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.Write(str);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+
+ public static void Write(object obj)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.Write(obj);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+
+ public static void Write(string format, params object[] args)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.Write(format, args);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+
+ public static void WriteLine(string str)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine(str);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+
+ public static void WriteLine(object obj)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine(obj);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+
+ public static void WriteLine(string format, params object[] args)
+ {
+ if (_debug)
+ {
+ var oldcolor = Console.ForegroundColor;
+ Console.ForegroundColor = ConsoleColor.Cyan;
+ Console.WriteLine(format, args);
+ Console.ForegroundColor = oldcolor;
+ }
+ }
+ }
+}
diff --git a/CloudWatchLogDownloader/Models/CommandOptions.cs b/CloudWatchLogDownloader/Models/CommandOptions.cs
index 3296cf6..cb0e41b 100644
--- a/CloudWatchLogDownloader/Models/CommandOptions.cs
+++ b/CloudWatchLogDownloader/Models/CommandOptions.cs
@@ -20,6 +20,9 @@ namespace CloudWatchLogDownloader.Models
[Option('l', "liveStream", HelpText="Keep pulling logs until Ctrl+C is applied")]
public bool LiveStream { get; set; }
+ [Option('d',"debug", HelpText = "print additional logs to console")]
+ public bool Debug { get; set; }
+
[ParserState]
public IParserState ParserState { get; set; }
diff --git a/CloudWatchLogDownloader/Program.cs b/CloudWatchLogDownloader/Program.cs
index 75e82e5..d15644f 100644
--- a/CloudWatchLogDownloader/Program.cs
+++ b/CloudWatchLogDownloader/Program.cs
@@ -16,6 +16,8 @@ namespace CloudWatchLogDownloader
var opt = new CommandOptions();
if (CommandLine.Parser.Default.ParseArguments(args, opt))
{
+ DebugLogger.Debug = opt.Debug;
+
client = new AmazonCloudWatchLogsClient();
var logGroup = GetLogGroup(opt.LogGroup);
var logStream = GetLogStream(logGroup, opt.LogStream);
@@ -29,8 +31,10 @@ namespace CloudWatchLogDownloader
DescribeLogGroupsResponse lgResponse = null;
do
{
+ DebugLogger.WriteLine("Getting logGroups...");
lgResponse = client.DescribeLogGroups(new DescribeLogGroupsRequest { NextToken = (lgResponse != null ? lgResponse.NextToken : null) });
allGroups.AddRange(lgResponse.LogGroups);
+ DebugLogger.WriteLine("Got logGroups, have {0}, {1} more pages", allGroups.Count, (!string.IsNullOrWhiteSpace(lgResponse.NextToken) ? "still" : "no"));
} while (!string.IsNullOrWhiteSpace(lgResponse.NextToken));
if (string.IsNullOrWhiteSpace(logGroup) || logGroup[logGroup.Length - 1] == '*')
@@ -64,12 +68,14 @@ namespace CloudWatchLogDownloader
DescribeLogStreamsResponse lsResponse = null;
do
{
+ DebugLogger.WriteLine("Getting logStreams...");
lsResponse = client.DescribeLogStreams(new DescribeLogStreamsRequest
{
NextToken = (lsResponse != null ? lsResponse.NextToken : null),
LogGroupName = logGroup.LogGroupName
});
allStreams.AddRange(lsResponse.LogStreams);
+ DebugLogger.WriteLine("Got logStreams, have {0}, {1} more pages", allStreams.Count, (!string.IsNullOrWhiteSpace(lsResponse.NextToken) ? "still" : "no"));
} while (!string.IsNullOrWhiteSpace(lsResponse.NextToken));
if (string.IsNullOrWhiteSpace(logStream) || logStream[logStream.Length - 1] == '*')
@@ -126,6 +132,7 @@ namespace CloudWatchLogDownloader
GetLogEventsResponse leResponse = null;
do
{
+ DebugLogger.WriteLine("Getting events...");
leResponse = client.GetLogEvents(new GetLogEventsRequest
{
LogGroupName = logGroup.LogGroupName,
@@ -133,13 +140,14 @@ namespace CloudWatchLogDownloader
StartFromHead = true,
NextToken = (leResponse != null ? leResponse.NextForwardToken : null)
});
+ DebugLogger.WriteLine("Got {0} events", leResponse.Events.Count);
foreach (var ev in leResponse.Events)
sw.WriteLine(ev.Message);
sw.Flush();
- if (!leResponse.Events.Any() && !lsMessage)
+ if (!leResponse.Events.Any() && !lsMessage && liveStream)
{
lsMessage = true;
ConsoleColor oldcolor = Console.ForegroundColor;