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
This commit is contained in:
Preetha Appan
2019-02-19 17:53:14 -06:00
parent 427ab71b47
commit b3b4d7b9a3
2 changed files with 51 additions and 6 deletions

View File

@@ -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 {

38
helper/logging/logging.go Normal file
View File

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