Improve raft log forwarder

It was very idiotic poll a buffer/read it and then write rather than
just have a custom writer.

License: MIT
Signed-off-by: Hector Sanjuan <hector@protocol.ai>
This commit is contained in:
Hector Sanjuan 2017-02-09 22:31:04 +01:00
parent 0e7091c6cb
commit 9deb56b762

View File

@ -1,17 +1,14 @@
package ipfscluster package ipfscluster
import ( import (
"bufio"
"bytes"
"log" "log"
"strings" "strings"
"time"
logging "github.com/ipfs/go-log" logging "github.com/ipfs/go-log"
) )
var logger = logging.Logger("cluster") var logger = logging.Logger("cluster")
var raftStdLogger = makeRaftLogger() var raftStdLogger = log.New(&logForwarder{}, "", 0)
var raftLogger = logging.Logger("raft") var raftLogger = logging.Logger("raft")
// SetFacilityLogLevel sets the log level for a given module // SetFacilityLogLevel sets the log level for a given module
@ -27,33 +24,25 @@ func SetFacilityLogLevel(f, l string) {
logging.SetLogLevel(f, l) logging.SetLogLevel(f, l)
} }
// This redirects Raft output to our logger // implements the writer interface
func makeRaftLogger() *log.Logger { type logForwarder struct{}
var buf bytes.Buffer
rLogger := log.New(&buf, "", 0)
reader := bufio.NewReader(&buf)
go func() {
for {
t, err := reader.ReadString('\n')
if err != nil {
time.Sleep(time.Second)
continue
}
t = strings.TrimSuffix(t, "\n")
switch { // Write forwards to our go-log logger.
case strings.Contains(t, "[DEBUG]"): // According to https://golang.org/pkg/log/#Logger.Output
raftLogger.Debug(strings.TrimPrefix(t, "[DEBUG] raft: ")) // it is called per line.
case strings.Contains(t, "[WARN]"): func (fw *logForwarder) Write(p []byte) (n int, err error) {
raftLogger.Warning(strings.TrimPrefix(t, "[WARN] raft: ")) t := strings.TrimSuffix(string(p), "\n")
case strings.Contains(t, "[ERR]"): switch {
raftLogger.Error(strings.TrimPrefix(t, "[ERR] raft: ")) case strings.Contains(t, "[DEBUG]"):
case strings.Contains(t, "[INFO]"): raftLogger.Debug(strings.TrimPrefix(t, "[DEBUG] raft: "))
raftLogger.Info(strings.TrimPrefix(t, "[INFO] raft: ")) case strings.Contains(t, "[WARN]"):
default: raftLogger.Warning(strings.TrimPrefix(t, "[WARN] raft: "))
raftLogger.Debug(t) case strings.Contains(t, "[ERR]"):
} raftLogger.Error(strings.TrimPrefix(t, "[ERR] raft: "))
} case strings.Contains(t, "[INFO]"):
}() raftLogger.Info(strings.TrimPrefix(t, "[INFO] raft: "))
return rLogger default:
raftLogger.Debug(t)
}
return len(p), nil
} }