From 2dee1c3337330cb81c744a251bdd2bba481ac885 Mon Sep 17 00:00:00 2001
From: Matteo Suppo <matteo.suppo@gmail.com>
Date: Thu, 19 Jan 2017 12:25:16 +0100
Subject: [PATCH] Create a new logger to display message tags and human format

Signed-off-by: Matteo Suppo <matteo.suppo@gmail.com>
---
 README.md                              |  2 +-
 src/arduino.cc/arduino-builder/main.go |  5 ++++-
 src/arduino.cc/builder/i18n/i18n.go    | 15 +++++++++++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index ed5e6a4b..357172eb 100644
--- a/README.md
+++ b/README.md
@@ -33,7 +33,7 @@ This tool generates function prototypes and gathers library paths, providing `gc
 
 * `-core-api-version`: Optional, defaults to "10600". The version of the Arduino IDE which is using this tool.
 
-* `-logger`: Optional, can be "human" or "machine". Defaults to "human". If "machine", messages emitted will be in a format which the Arduino IDE understands and that it uses for I18N.
+* `-logger`: Optional, can be "human", "humantags" or "machine". Defaults to "human". If "humantags" the messages are qualified with a prefix that indicates their level (info, debug, error). If "machine", messages emitted will be in a format which the Arduino IDE understands and that it uses for I18N.
 
 * `-version`: if specified, prints version and exits.
 
diff --git a/src/arduino.cc/arduino-builder/main.go b/src/arduino.cc/arduino-builder/main.go
index 94b3b137..8317c097 100644
--- a/src/arduino.cc/arduino-builder/main.go
+++ b/src/arduino.cc/arduino-builder/main.go
@@ -74,6 +74,7 @@ const FLAG_WARNINGS_MORE = "more"
 const FLAG_WARNINGS_ALL = "all"
 const FLAG_LOGGER = "logger"
 const FLAG_LOGGER_HUMAN = "human"
+const FLAG_LOGGER_HUMANTAGS = "humantags"
 const FLAG_LOGGER_MACHINE = "machine"
 const FLAG_VERSION = "version"
 const FLAG_VID_PID = "vid-pid"
@@ -152,7 +153,7 @@ func init() {
 	quietFlag = flag.Bool(FLAG_QUIET, false, "if 'true' doesn't print any warnings or progress or whatever")
 	debugLevelFlag = flag.Int(FLAG_DEBUG_LEVEL, builder.DEFAULT_DEBUG_LEVEL, "Turns on debugging messages. The higher, the chattier")
 	warningsLevelFlag = flag.String(FLAG_WARNINGS, "", "Sets warnings level. Available values are '"+FLAG_WARNINGS_NONE+"', '"+FLAG_WARNINGS_DEFAULT+"', '"+FLAG_WARNINGS_MORE+"' and '"+FLAG_WARNINGS_ALL+"'")
-	loggerFlag = flag.String(FLAG_LOGGER, FLAG_LOGGER_HUMAN, "Sets type of logger. Available values are '"+FLAG_LOGGER_HUMAN+"', '"+FLAG_LOGGER_MACHINE+"'")
+	loggerFlag = flag.String(FLAG_LOGGER, FLAG_LOGGER_HUMAN, "Sets type of logger. Available values are '"+FLAG_LOGGER_HUMAN+"', '"+FLAG_LOGGER_HUMANTAGS+"', '"+FLAG_LOGGER_MACHINE+"'")
 	versionFlag = flag.Bool(FLAG_VERSION, false, "prints version and exits")
 	vidPidFlag = flag.String(FLAG_VID_PID, "", "specify to use vid/pid specific build properties, as defined in boards.txt")
 }
@@ -299,6 +300,8 @@ func main() {
 		ctx.SetLogger(i18n.NoopLogger{})
 	} else if *loggerFlag == FLAG_LOGGER_MACHINE {
 		ctx.SetLogger(i18n.MachineLogger{})
+	} else if *loggerFlag == FLAG_LOGGER_HUMANTAGS {
+		ctx.SetLogger(i18n.HumanTagsLogger{})
 	} else {
 		ctx.SetLogger(i18n.HumanLogger{})
 	}
diff --git a/src/arduino.cc/builder/i18n/i18n.go b/src/arduino.cc/builder/i18n/i18n.go
index fbc53a1c..ce85d22c 100644
--- a/src/arduino.cc/builder/i18n/i18n.go
+++ b/src/arduino.cc/builder/i18n/i18n.go
@@ -58,6 +58,21 @@ func (s NoopLogger) Name() string {
 	return "noop"
 }
 
+type HumanTagsLogger struct{}
+
+func (s HumanTagsLogger) Fprintln(w io.Writer, level string, format string, a ...interface{}) {
+	format = "[" + level + "] " + format
+	fmt.Fprintln(w, Format(format, a...))
+}
+
+func (s HumanTagsLogger) Println(level string, format string, a ...interface{}) {
+	s.Fprintln(os.Stdout, level, format, a...)
+}
+
+func (s HumanTagsLogger) Name() string {
+	return "humantags"
+}
+
 type HumanLogger struct{}
 
 func (s HumanLogger) Fprintln(w io.Writer, level string, format string, a ...interface{}) {