[logger] Add prefix identifier in logs for botanist.
This change modifies logger creation to allow for custom prefixes and, specifically, prepends "botanist" to related log entries.
Bug: IN-1171
Change-Id: I0f42e09e5008732275c8743ceb150770fa373655
diff --git a/cmd/botanist/main.go b/cmd/botanist/main.go
index fc085e1..906c04d 100644
--- a/cmd/botanist/main.go
+++ b/cmd/botanist/main.go
@@ -39,7 +39,7 @@
flag.Parse()
- log := logger.NewLogger(level, color.NewColor(colors), os.Stdout, os.Stderr)
+ log := logger.NewLogger(level, color.NewColor(colors), os.Stdout, os.Stderr, "botanist ")
ctx := logger.WithLogger(context.Background(), log)
ctx = command.CancelOnSignals(ctx, syscall.SIGTERM)
os.Exit(int(subcommands.Execute(ctx)))
diff --git a/cmd/botanist/zedboot.go b/cmd/botanist/zedboot.go
index 42d85c1..0b765f8 100644
--- a/cmd/botanist/zedboot.go
+++ b/cmd/botanist/zedboot.go
@@ -17,7 +17,6 @@
"strings"
"time"
- "fuchsia.googlesource.com/tools/tarutil"
"fuchsia.googlesource.com/tools/botanist/target"
"fuchsia.googlesource.com/tools/build"
"fuchsia.googlesource.com/tools/command"
@@ -25,6 +24,7 @@
"fuchsia.googlesource.com/tools/netutil"
"fuchsia.googlesource.com/tools/runner"
"fuchsia.googlesource.com/tools/runtests"
+ "fuchsia.googlesource.com/tools/tarutil"
"github.com/google/subcommands"
)
@@ -195,7 +195,7 @@
return fmt.Errorf("failed to load target config file %q", cmd.configFile)
}
opts := target.Options{
- Netboot: cmd.netboot,
+ Netboot: cmd.netboot,
}
var devices []*target.DeviceTarget
diff --git a/cmd/buildidtool/main.go b/cmd/buildidtool/main.go
index 2324752..596816a 100644
--- a/cmd/buildidtool/main.go
+++ b/cmd/buildidtool/main.go
@@ -160,7 +160,7 @@
}
func main() {
- l := logger.NewLogger(level, color.NewColor(colors), os.Stderr, os.Stderr)
+ l := logger.NewLogger(level, color.NewColor(colors), os.Stderr, os.Stderr, "")
// Parse flags and check for errors.
flag.Parse()
if buildIDDir == "" {
diff --git a/cmd/symbolize/main.go b/cmd/symbolize/main.go
index bee802c..8887c1e 100644
--- a/cmd/symbolize/main.go
+++ b/cmd/symbolize/main.go
@@ -93,7 +93,7 @@
// Setup logger and context
painter := color.NewColor(colors)
- log := logger.NewLogger(level, painter, os.Stdout, os.Stderr)
+ log := logger.NewLogger(level, painter, os.Stdout, os.Stderr, "")
ctx := logger.WithLogger(context.Background(), log)
// Construct the nodes of the pipeline
diff --git a/logger/logger.go b/logger/logger.go
index 30bbc66..8dfb6e1 100644
--- a/logger/logger.go
+++ b/logger/logger.go
@@ -25,6 +25,7 @@
goLogger *goLog.Logger
goErrorLogger *goLog.Logger
color color.Color
+ prefix string
}
type LogLevel int
@@ -79,7 +80,11 @@
return nil
}
-func NewLogger(loggerLevel LogLevel, color color.Color, outWriter, errWriter io.Writer) *Logger {
+// NewLogger creates a new logger instance. The loggerLevel variable sets the log level for the logger.
+// The color variable specifies the visual color of displayed log output.
+// The outWriter and errWriter variables set the destination to which non-error and error data will be written.
+// The prefix appears on the same line directly preceding any log data.
+func NewLogger(loggerLevel LogLevel, color color.Color, outWriter, errWriter io.Writer, prefix string) *Logger {
if outWriter == nil {
outWriter = os.Stdout
}
@@ -91,12 +96,13 @@
goLogger: goLog.New(outWriter, "", goLog.LstdFlags),
goErrorLogger: goLog.New(errWriter, "", goLog.LstdFlags),
color: color,
+ prefix: prefix,
}
return l
}
func (l *Logger) log(prefix, format string, a ...interface{}) {
- l.goLogger.Printf("%s%s", prefix, fmt.Sprintf(format, a...))
+ l.goLogger.Printf("%s%s%s", l.prefix, prefix, fmt.Sprintf(format, a...))
}
func (l *Logger) Logf(loglevel LogLevel, format string, a ...interface{}) {
@@ -168,7 +174,7 @@
func (l *Logger) Errorf(format string, a ...interface{}) {
if l.LoggerLevel >= ErrorLevel {
- l.goErrorLogger.Printf("%s%s", l.color.Red("ERROR: "), fmt.Sprintf(format, a...))
+ l.goErrorLogger.Printf("%s%s%s", l.prefix, l.color.Red("ERROR: "), fmt.Sprintf(format, a...))
}
}
@@ -178,7 +184,7 @@
func (l *Logger) Fatalf(format string, a ...interface{}) {
if l.LoggerLevel >= FatalLevel {
- l.goErrorLogger.Fatalf("%s%s", l.color.Red("FATAL: "), fmt.Sprintf(format, a...))
+ l.goErrorLogger.Fatalf("%s%s%s", l.prefix, l.color.Red("FATAL: "), fmt.Sprintf(format, a...))
}
}
diff --git a/logger/logger_test.go b/logger/logger_test.go
index fa0ad70..daad642 100644
--- a/logger/logger_test.go
+++ b/logger/logger_test.go
@@ -10,7 +10,7 @@
)
func TestWithContext(t *testing.T) {
- logger := NewLogger(DebugLevel, color.NewColor(color.ColorAuto), os.Stdout, os.Stderr)
+ logger := NewLogger(DebugLevel, color.NewColor(color.ColorAuto), os.Stdout, os.Stderr, "")
ctx := context.Background()
if v, ok := ctx.Value(globalLoggerKeyType{}).(*Logger); ok || v != nil {
t.Fatalf("Default context should not have globalLoggerKeyType. Expected: \nnil\n but got: \n%+v ", v)
@@ -23,11 +23,17 @@
}
func TestNewLogger(t *testing.T) {
- logger := NewLogger(InfoLevel, color.NewColor(color.ColorAuto), nil, nil)
+ prefix := "testprefix "
+
+ logger := NewLogger(InfoLevel, color.NewColor(color.ColorAuto), nil, nil, prefix)
logFlags, errFlags := logger.goLogger.Flags(), logger.goErrorLogger.Flags()
if logFlags != goLog.LstdFlags || errFlags != goLog.LstdFlags {
t.Fatalf("New loggers should have the proper flags set for both standard and error logging. Expected: \n%+v and %+v\n but got: \n%+v and %+v", goLog.LstdFlags, goLog.LstdFlags, logFlags, errFlags)
}
+ logPrefix := logger.prefix
+ if logPrefix != prefix {
+ t.Fatalf("New loggers should use the specified prefix on creation. Expected: \n%+v\n but got: \n%+v", prefix, logPrefix)
+ }
}