From b3b4d7b9a3a71d3e5db0026fb4eb975512104b7c Mon Sep 17 00:00:00 2001 From: Preetha Appan Date: Tue, 19 Feb 2019 17:53:14 -0600 Subject: [PATCH] cli Ui implementation that logs to a hclogger This makes it so any messages output to the UI *after* the agent has started will be logged in json format correctly --- command/agent/command.go | 19 +++++++++++++------ helper/logging/logging.go | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+), 6 deletions(-) create mode 100644 helper/logging/logging.go diff --git a/command/agent/command.go b/command/agent/command.go index 47da7e272..0f15d15c6 100644 --- a/command/agent/command.go +++ b/command/agent/command.go @@ -15,18 +15,19 @@ import ( "syscall" "time" - metrics "github.com/armon/go-metrics" + "github.com/armon/go-metrics" "github.com/armon/go-metrics/circonus" "github.com/armon/go-metrics/datadog" "github.com/armon/go-metrics/prometheus" "github.com/hashicorp/consul/lib" - checkpoint "github.com/hashicorp/go-checkpoint" - discover "github.com/hashicorp/go-discover" - gsyslog "github.com/hashicorp/go-syslog" + "github.com/hashicorp/go-checkpoint" + "github.com/hashicorp/go-discover" + "github.com/hashicorp/go-syslog" "github.com/hashicorp/logutils" "github.com/hashicorp/nomad/helper" - flaghelper "github.com/hashicorp/nomad/helper/flag-helpers" - gatedwriter "github.com/hashicorp/nomad/helper/gated-writer" + "github.com/hashicorp/nomad/helper/flag-helpers" + "github.com/hashicorp/nomad/helper/gated-writer" + "github.com/hashicorp/nomad/helper/logging" "github.com/hashicorp/nomad/nomad/structs/config" "github.com/hashicorp/nomad/version" "github.com/mitchellh/cli" @@ -576,6 +577,12 @@ func (c *Command) Run(args []string) int { } defer c.agent.Shutdown() + // After the agent is created we have a logger, so swap out the implementation + // of the UI if json logging is enabled + if config.LogJson { + c.Ui = &logging.HcLogUI{Log: c.agent.logger} + } + // Shutdown the HTTP server at the end defer func() { if c.httpServer != nil { diff --git a/helper/logging/logging.go b/helper/logging/logging.go new file mode 100644 index 000000000..c85659ff0 --- /dev/null +++ b/helper/logging/logging.go @@ -0,0 +1,38 @@ +package logging + +import ( + "fmt" + + "github.com/hashicorp/go-hclog" +) + +// HcLogUI is an implementation of Ui that takes a hclogger +// and uses it to Log the output. It is intended for write only +// use cases and the Ask/AskSecret methods are not implemented. +type HcLogUI struct { + Log hclog.Logger +} + +func (l *HcLogUI) Ask(query string) (string, error) { + return "", fmt.Errorf("Ask is not supported in this implementation") +} + +func (l *HcLogUI) AskSecret(query string) (string, error) { + return "", fmt.Errorf("AskSecret is not supported in this implementation") +} + +func (l *HcLogUI) Output(message string) { + l.Log.Info(message) +} + +func (l *HcLogUI) Info(message string) { + l.Log.Info(message) +} + +func (l *HcLogUI) Error(message string) { + l.Log.Error(message) +} + +func (l *HcLogUI) Warn(message string) { + l.Log.Warn(message) +}