diff --git a/src/CodeGeneration.Roslyn.Tasks/GenerateCodeFromAttributes.cs b/src/CodeGeneration.Roslyn.Tasks/GenerateCodeFromAttributes.cs
index 714cdb98d..83296bff8 100644
--- a/src/CodeGeneration.Roslyn.Tasks/GenerateCodeFromAttributes.cs
+++ b/src/CodeGeneration.Roslyn.Tasks/GenerateCodeFromAttributes.cs
@@ -91,12 +91,51 @@ protected override string GenerateResponseFileCommands()
argBuilder.AppendLine(this.generatedCompileItemsFilePath);
argBuilder.AppendLine("--");
- foreach(var item in this.Compile)
+ foreach (var item in this.Compile)
{
argBuilder.AppendLine(item.ItemSpec);
}
return argBuilder.ToString();
}
+
+ protected override void LogEventsFromTextOutput(string singleLine, MessageImportance messageImportance)
+ {
+ MessageImportance newImportance;
+ if (DidExtractPrefix("High"))
+ {
+ newImportance = MessageImportance.High;
+ }
+ else if (DidExtractPrefix("Normal"))
+ {
+ newImportance = MessageImportance.Normal;
+ }
+ else if (DidExtractPrefix("Low"))
+ {
+ newImportance = MessageImportance.Low;
+ }
+ else
+ {
+ newImportance = messageImportance;
+ }
+
+ if (newImportance < messageImportance)
+ {
+ messageImportance = newImportance; // Lower value => higher importance
+ }
+
+ base.LogEventsFromTextOutput(singleLine, messageImportance);
+
+ bool DidExtractPrefix(string importanceString)
+ {
+ var prefix = $"::{importanceString}::";
+ if (singleLine.StartsWith(prefix))
+ {
+ singleLine = singleLine.Substring(prefix.Length);
+ return true;
+ }
+ return false;
+ }
+ }
}
}
diff --git a/src/CodeGeneration.Roslyn.Tool/Program.cs b/src/CodeGeneration.Roslyn.Tool/Program.cs
index f1b02e8d0..142983693 100644
--- a/src/CodeGeneration.Roslyn.Tool/Program.cs
+++ b/src/CodeGeneration.Roslyn.Tool/Program.cs
@@ -53,8 +53,10 @@ static int Main(string[] args)
{
generator.Generate(progress);
}
- catch
+ catch (Exception e)
{
+ Logger.Log(LogLevel.High, $"{e.GetType().Name}: {e.Message}");
+ Logger.Log(LogLevel.High, e.ToString());
return 3;
}
@@ -65,7 +67,7 @@ static int Main(string[] args)
foreach (var file in generator.GeneratedFiles)
{
- Console.WriteLine(file);
+ Logger.Log(LogLevel.Normal, file);
}
return 0;
diff --git a/src/CodeGeneration.Roslyn/Logger.cs b/src/CodeGeneration.Roslyn/Logger.cs
new file mode 100644
index 000000000..d70126613
--- /dev/null
+++ b/src/CodeGeneration.Roslyn/Logger.cs
@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CodeGeneration.Roslyn
+{
+ public enum LogLevel
+ {
+ ///
+ /// High importance, appears in less verbose logs
+ ///
+ High = 0,
+
+ ///
+ /// Normal importance
+ ///
+ Normal = 1,
+
+ ///
+ /// Low importance, appears in more verbose logs
+ ///
+ Low = 2,
+ }
+ public static class Logger
+ {
+ public static void Log(LogLevel logLevel, string message)
+ {
+ // Prefix every Line with loglevel
+ var begin = 0;
+ var end = message.IndexOf('\n');
+ bool foundR = end > 0 && message[end - 1] == '\r';
+ if(foundR)
+ end--;
+ while (end != -1)
+ {
+ Print(message.Substring(begin, end - begin));
+ begin = end + (foundR ? 2 : 1);
+ end = message.IndexOf('\n', begin);
+ foundR = end > 0 && message[end - 1] == '\r';
+ if(foundR)
+ end--;
+ }
+ Print(message.Substring(begin, message.Length - begin));
+
+ void Print(string toPrint) => Console.WriteLine($"::{logLevel}::{toPrint}");
+ }
+ }
+}