3 Commits

Author SHA1 Message Date
Gardient
de6becc208 adds debug logging 2016-11-15 14:48:41 +02:00
gardient
917624ad52 Adds license file 2016-11-10 14:04:19 +02:00
Gardient
e9c060cd0d #1 - fixes ignored command line argument 2016-11-10 13:47:37 +02:00
5 changed files with 134 additions and 6 deletions

View File

@@ -56,6 +56,7 @@
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="DebugLogger.cs" />
<Compile Include="Models\CommandOptions.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />

View File

@@ -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;
}
}
}
}

View File

@@ -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; }

View File

@@ -5,7 +5,6 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using Amazon;
namespace CloudWatchLogDownloader
{
@@ -17,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);
@@ -30,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] == '*')
@@ -65,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] == '*')
@@ -102,10 +107,19 @@ namespace CloudWatchLogDownloader
private static void WriteLogToFile(LogGroup logGroup, LogStream logStream, bool liveStream, string outputFilePath = null)
{
Console.WriteLine("Choose Output file [logs/" + logStream.LogStreamName + ".log]: ");
var output = Console.ReadLine();
if (string.IsNullOrWhiteSpace(output))
output = "logs/" + logStream.LogStreamName + ".log";
string output = null;
if (string.IsNullOrWhiteSpace(outputFilePath))
{
Console.WriteLine("Choose Output file [logs/" + logStream.LogStreamName + ".log]: ");
output = Console.ReadLine();
if (string.IsNullOrWhiteSpace(output))
output = "logs/" + logStream.LogStreamName + ".log";
}
else
{
output = outputFilePath;
}
if (!Directory.GetParent(output).Exists)
Directory.CreateDirectory(Directory.GetParent(output).FullName);
@@ -118,6 +132,7 @@ namespace CloudWatchLogDownloader
GetLogEventsResponse leResponse = null;
do
{
DebugLogger.WriteLine("Getting events...");
leResponse = client.GetLogEvents(new GetLogEventsRequest
{
LogGroupName = logGroup.LogGroupName,
@@ -125,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;

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2016 gardient
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.