Remove LogOutput from Agent

Now that it is no longer used, we can remove this unnecessary field. This is a pre-step in cleanup up RuntimeConfig->Consul.Config, which is a pre-step to adding a gRPCHandler component to Server for streaming.

Removing this field also allows us to remove one of the return values from logging.Setup.
This commit is contained in:
Daniel Nephin 2020-07-29 16:18:54 -04:00
parent 5acf01ceeb
commit 0420d91cdd
5 changed files with 18 additions and 40 deletions

View File

@ -37,10 +37,6 @@ type TestACLAgent struct {
// when Shutdown() is called. // when Shutdown() is called.
Config *config.RuntimeConfig Config *config.RuntimeConfig
// LogOutput is the sink for the logs. If nil, logs are written
// to os.Stderr.
LogOutput io.Writer
// DataDir is the data directory which is used when Config.DataDir // DataDir is the data directory which is used when Config.DataDir
// is not set. It is created automatically and removed when // is not set. It is created automatically and removed when
// Shutdown() is called. // Shutdown() is called.
@ -59,11 +55,10 @@ func NewTestACLAgent(t *testing.T, name string, hcl string, resolveAuthz authzRe
a := &TestACLAgent{Name: name, HCL: hcl, resolveAuthzFn: resolveAuthz, resolveIdentFn: resolveIdent} a := &TestACLAgent{Name: name, HCL: hcl, resolveAuthzFn: resolveAuthz, resolveIdentFn: resolveIdent}
dataDir := `data_dir = "acl-agent"` dataDir := `data_dir = "acl-agent"`
logOutput := testutil.NewLogBuffer(t)
logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{
Name: a.Name, Name: a.Name,
Level: hclog.Debug, Level: hclog.Debug,
Output: logOutput, Output: testutil.NewLogBuffer(t),
}) })
opts := []AgentOption{ opts := []AgentOption{
@ -82,7 +77,6 @@ func NewTestACLAgent(t *testing.T, name string, hcl string, resolveAuthz authzRe
a.Config = agent.GetConfig() a.Config = agent.GetConfig()
a.Agent = agent a.Agent = agent
agent.LogOutput = logOutput
agent.logger = logger agent.logger = logger
agent.MemSink = metrics.NewInmemSink(1*time.Second, time.Minute) agent.MemSink = metrics.NewInmemSink(1*time.Second, time.Minute)

View File

@ -174,15 +174,6 @@ type Agent struct {
// Used for writing our logs // Used for writing our logs
logger hclog.InterceptLogger logger hclog.InterceptLogger
// LogOutput is a Writer which is used when creating dependencies that
// require logging. Note that this LogOutput is not used by the agent logger,
// so setting this field does not result in the agent logs being written to
// LogOutput.
// FIXME: refactor so that: dependencies accept an hclog.Logger,
// or LogOutput is part of RuntimeConfig, or change Agent.logger to be
// a new type with an Out() io.Writer method which returns this value.
LogOutput io.Writer
// In-memory sink used for collecting metrics // In-memory sink used for collecting metrics
MemSink *metrics.InmemSink MemSink *metrics.InmemSink
@ -477,14 +468,11 @@ func New(options ...AgentOption) (*Agent, error) {
LogRotateMaxFiles: config.LogRotateMaxFiles, LogRotateMaxFiles: config.LogRotateMaxFiles,
} }
logger, logOutput, err := logging.Setup(logConf, flat.writers) a.logger, err = logging.Setup(logConf, flat.writers)
if err != nil { if err != nil {
return nil, err return nil, err
} }
a.logger = logger
a.LogOutput = logOutput
grpclog.SetLoggerV2(logging.NewGRPCLogger(logConf, a.logger)) grpclog.SetLoggerV2(logging.NewGRPCLogger(logConf, a.logger))
} }

View File

@ -140,7 +140,7 @@ func (c *cmd) Run(args []string) int {
logGate := logging.GatedWriter{Writer: &cli.UiWriter{Ui: c.UI}} logGate := logging.GatedWriter{Writer: &cli.UiWriter{Ui: c.UI}}
logger, _, err := logging.Setup(logConfig, []io.Writer{&logGate}) logger, err := logging.Setup(logConfig, []io.Writer{&logGate})
if err != nil { if err != nil {
c.UI.Error(err.Error()) c.UI.Error(err.Error())
return 1 return 1

View File

@ -63,9 +63,9 @@ type LogSetupErrorFn func(string)
// The provided ui object will get any log messages related to setting up // The provided ui object will get any log messages related to setting up
// logging itself, and will also be hooked up to the gated logger. The final bool // logging itself, and will also be hooked up to the gated logger. The final bool
// parameter indicates if logging was set up successfully. // parameter indicates if logging was set up successfully.
func Setup(config *Config, writers []io.Writer) (hclog.InterceptLogger, io.Writer, error) { func Setup(config *Config, writers []io.Writer) (hclog.InterceptLogger, error) {
if !ValidateLogLevel(config.LogLevel) { if !ValidateLogLevel(config.LogLevel) {
return nil, nil, fmt.Errorf("Invalid log level: %s. Valid log levels are: %v", return nil, fmt.Errorf("Invalid log level: %s. Valid log levels are: %v",
config.LogLevel, config.LogLevel,
allowedLogLevels) allowedLogLevels)
} }
@ -84,7 +84,7 @@ func Setup(config *Config, writers []io.Writer) (hclog.InterceptLogger, io.Write
if i == retries { if i == retries {
timeout := time.Duration(retries) * delay timeout := time.Duration(retries) * delay
return nil, nil, fmt.Errorf("Syslog setup did not succeed within timeout (%s).", timeout.String()) return nil, fmt.Errorf("Syslog setup did not succeed within timeout (%s).", timeout.String())
} }
time.Sleep(delay) time.Sleep(delay)
@ -121,19 +121,16 @@ func Setup(config *Config, writers []io.Writer) (hclog.InterceptLogger, io.Write
MaxFiles: config.LogRotateMaxFiles, MaxFiles: config.LogRotateMaxFiles,
} }
if err := logFile.openNew(); err != nil { if err := logFile.openNew(); err != nil {
return nil, nil, fmt.Errorf("Failed to setup logging: %w", err) return nil, fmt.Errorf("Failed to setup logging: %w", err)
} }
writers = append(writers, logFile) writers = append(writers, logFile)
} }
logOutput := io.MultiWriter(writers...)
logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{ logger := hclog.NewInterceptLogger(&hclog.LoggerOptions{
Level: LevelFromString(config.LogLevel), Level: LevelFromString(config.LogLevel),
Name: config.Name, Name: config.Name,
Output: logOutput, Output: io.MultiWriter(writers...),
JSONFormat: config.LogJSON, JSONFormat: config.LogJSON,
}) })
return logger, nil
return logger, logOutput, nil
} }

View File

@ -19,9 +19,8 @@ func TestLogger_SetupBasic(t *testing.T) {
LogLevel: "INFO", LogLevel: "INFO",
} }
logger, writer, err := Setup(cfg, nil) logger, err := Setup(cfg, nil)
require.NoError(err) require.NoError(err)
require.NotNil(writer)
require.NotNil(logger) require.NotNil(logger)
} }
@ -29,7 +28,7 @@ func TestLogger_SetupInvalidLogLevel(t *testing.T) {
t.Parallel() t.Parallel()
cfg := &Config{} cfg := &Config{}
_, _, err := Setup(cfg, nil) _, err := Setup(cfg, nil)
testutil.RequireErrorContains(t, err, "Invalid log level") testutil.RequireErrorContains(t, err, "Invalid log level")
} }
@ -62,7 +61,7 @@ func TestLogger_SetupLoggerErrorLevel(t *testing.T) {
require := require.New(t) require := require.New(t)
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(&cfg, []io.Writer{&buf}) logger, err := Setup(&cfg, []io.Writer{&buf})
require.NoError(err) require.NoError(err)
require.NotNil(logger) require.NotNil(logger)
@ -85,7 +84,7 @@ func TestLogger_SetupLoggerDebugLevel(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.NoError(err) require.NoError(err)
require.NotNil(logger) require.NotNil(logger)
@ -107,7 +106,7 @@ func TestLogger_SetupLoggerWithName(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.NoError(err) require.NoError(err)
require.NotNil(logger) require.NotNil(logger)
@ -126,7 +125,7 @@ func TestLogger_SetupLoggerWithJSON(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.NoError(err) require.NoError(err)
require.NotNil(logger) require.NotNil(logger)
@ -154,7 +153,7 @@ func TestLogger_SetupLoggerWithValidLogPath(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.NoError(err) require.NoError(err)
require.NotNil(logger) require.NotNil(logger)
} }
@ -169,7 +168,7 @@ func TestLogger_SetupLoggerWithInValidLogPath(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.Error(err) require.Error(err)
require.True(errors.Is(err, os.ErrNotExist)) require.True(errors.Is(err, os.ErrNotExist))
require.Nil(logger) require.Nil(logger)
@ -190,7 +189,7 @@ func TestLogger_SetupLoggerWithInValidLogPathPermission(t *testing.T) {
} }
var buf bytes.Buffer var buf bytes.Buffer
logger, _, err := Setup(cfg, []io.Writer{&buf}) logger, err := Setup(cfg, []io.Writer{&buf})
require.Error(err) require.Error(err)
require.True(errors.Is(err, os.ErrPermission)) require.True(errors.Is(err, os.ErrPermission))
require.Nil(logger) require.Nil(logger)