|
|
@ -27,16 +27,16 @@ type Config struct { |
|
|
|
// SyslogFacility is the destination for syslog forwarding.
|
|
|
|
// SyslogFacility is the destination for syslog forwarding.
|
|
|
|
SyslogFacility string |
|
|
|
SyslogFacility string |
|
|
|
|
|
|
|
|
|
|
|
//LogFilePath is the path to write the logs to the user specified file.
|
|
|
|
// LogFilePath is the path to write the logs to the user specified file.
|
|
|
|
LogFilePath string |
|
|
|
LogFilePath string |
|
|
|
|
|
|
|
|
|
|
|
//LogRotateDuration is the user specified time to rotate logs
|
|
|
|
// LogRotateDuration is the user specified time to rotate logs
|
|
|
|
LogRotateDuration time.Duration |
|
|
|
LogRotateDuration time.Duration |
|
|
|
|
|
|
|
|
|
|
|
//LogRotateBytes is the user specified byte limit to rotate logs
|
|
|
|
// LogRotateBytes is the user specified byte limit to rotate logs
|
|
|
|
LogRotateBytes int |
|
|
|
LogRotateBytes int |
|
|
|
|
|
|
|
|
|
|
|
//LogRotateMaxFiles is the maximum number of past archived log files to keep
|
|
|
|
// LogRotateMaxFiles is the maximum number of past archived log files to keep
|
|
|
|
LogRotateMaxFiles int |
|
|
|
LogRotateMaxFiles int |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -45,6 +45,17 @@ const defaultRotateDuration = 24 * time.Hour |
|
|
|
|
|
|
|
|
|
|
|
type LogSetupErrorFn func(string) |
|
|
|
type LogSetupErrorFn func(string) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// noErrorWriter is a wrapper to suppress errors when writing to w.
|
|
|
|
|
|
|
|
type noErrorWriter struct { |
|
|
|
|
|
|
|
w io.Writer |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func (w noErrorWriter) Write(p []byte) (n int, err error) { |
|
|
|
|
|
|
|
_, _ = w.w.Write(p) |
|
|
|
|
|
|
|
// We purposely return n == len(p) as if write was successful
|
|
|
|
|
|
|
|
return len(p), nil |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// Setup logging from Config, and return an hclog Logger.
|
|
|
|
// Setup logging from Config, and return an hclog Logger.
|
|
|
|
//
|
|
|
|
//
|
|
|
|
// Logs may be written to out, and optionally to syslog, and a file.
|
|
|
|
// Logs may be written to out, and optionally to syslog, and a file.
|
|
|
@ -55,7 +66,10 @@ func Setup(config Config, out io.Writer) (hclog.InterceptLogger, error) { |
|
|
|
allowedLogLevels) |
|
|
|
allowedLogLevels) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
writers := []io.Writer{out} |
|
|
|
// If out is os.Stdout and Consul is being run as a Windows Service, writes will
|
|
|
|
|
|
|
|
// fail silently, which may inadvertently prevent writes to other writers.
|
|
|
|
|
|
|
|
// noErrorWriter is used as a wrapper to suppress any errors when writing to out.
|
|
|
|
|
|
|
|
writers := []io.Writer{noErrorWriter{w: out}} |
|
|
|
|
|
|
|
|
|
|
|
if config.EnableSyslog { |
|
|
|
if config.EnableSyslog { |
|
|
|
retries := 12 |
|
|
|
retries := 12 |
|
|
|