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:
parent
0e7091c6cb
commit
9deb56b762
53
logging.go
53
logging.go
|
@ -1,17 +1,14 @@
|
|||
package ipfscluster
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
logging "github.com/ipfs/go-log"
|
||||
)
|
||||
|
||||
var logger = logging.Logger("cluster")
|
||||
var raftStdLogger = makeRaftLogger()
|
||||
var raftStdLogger = log.New(&logForwarder{}, "", 0)
|
||||
var raftLogger = logging.Logger("raft")
|
||||
|
||||
// SetFacilityLogLevel sets the log level for a given module
|
||||
|
@ -27,33 +24,25 @@ func SetFacilityLogLevel(f, l string) {
|
|||
logging.SetLogLevel(f, l)
|
||||
}
|
||||
|
||||
// This redirects Raft output to our logger
|
||||
func makeRaftLogger() *log.Logger {
|
||||
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")
|
||||
// implements the writer interface
|
||||
type logForwarder struct{}
|
||||
|
||||
switch {
|
||||
case strings.Contains(t, "[DEBUG]"):
|
||||
raftLogger.Debug(strings.TrimPrefix(t, "[DEBUG] raft: "))
|
||||
case strings.Contains(t, "[WARN]"):
|
||||
raftLogger.Warning(strings.TrimPrefix(t, "[WARN] raft: "))
|
||||
case strings.Contains(t, "[ERR]"):
|
||||
raftLogger.Error(strings.TrimPrefix(t, "[ERR] raft: "))
|
||||
case strings.Contains(t, "[INFO]"):
|
||||
raftLogger.Info(strings.TrimPrefix(t, "[INFO] raft: "))
|
||||
default:
|
||||
raftLogger.Debug(t)
|
||||
}
|
||||
}
|
||||
}()
|
||||
return rLogger
|
||||
// Write forwards to our go-log logger.
|
||||
// According to https://golang.org/pkg/log/#Logger.Output
|
||||
// it is called per line.
|
||||
func (fw *logForwarder) Write(p []byte) (n int, err error) {
|
||||
t := strings.TrimSuffix(string(p), "\n")
|
||||
switch {
|
||||
case strings.Contains(t, "[DEBUG]"):
|
||||
raftLogger.Debug(strings.TrimPrefix(t, "[DEBUG] raft: "))
|
||||
case strings.Contains(t, "[WARN]"):
|
||||
raftLogger.Warning(strings.TrimPrefix(t, "[WARN] raft: "))
|
||||
case strings.Contains(t, "[ERR]"):
|
||||
raftLogger.Error(strings.TrimPrefix(t, "[ERR] raft: "))
|
||||
case strings.Contains(t, "[INFO]"):
|
||||
raftLogger.Info(strings.TrimPrefix(t, "[INFO] raft: "))
|
||||
default:
|
||||
raftLogger.Debug(t)
|
||||
}
|
||||
return len(p), nil
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user