Skip to content

Commit

Permalink
[log] Uses buffered IO for gateway.log
Browse files Browse the repository at this point in the history
In such heavry write scenario, even for product stage, like high follow-control case,
the gateway log writes will be a minor bottleneck.
  • Loading branch information
zhiyanliu authored and Jack47 committed Dec 26, 2017
1 parent a85d230 commit 4ec376d
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 12 deletions.
8 changes: 5 additions & 3 deletions src/logger/http.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,15 @@ var (
)

func initHTTP() {
formatter := new(httpFormatter)

f, out, err := openBufferedLogFile(LOG_HTTP_ACCESS_FILE)
if err != nil {
Errorf("[open log file %s failed: %v]", LOG_HTTP_ACCESS_FILE, err)
} else {
httpLog.registerFileLogger("http_access", f, out, LOG_HTTP_ACCESS_FILE, formatter, LOG_HTTP_LEVEL)
}

httpLog.registerFileLogger("http_access", f, out, LOG_HTTP_ACCESS_FILE, &httpFormatter{}, LOG_HTTP_LEVEL)

// test example:
// req := httptest.NewRequest("POST", "https://127.0.0.1/api/sessions", nil)
// req.Header.Set("Referer", "http:https://easeteam.com/login")
Expand All @@ -39,7 +41,7 @@ func initHTTP() {
Errorf("[open log file %s failed: %v]", LOG_HTTP_DUMP_FILE, err)
} else {
// no buffer for performance, normally dump for debug or functional test only
httpLog.registerFileLogger("http_dump", f, f, LOG_HTTP_DUMP_FILE, &httpFormatter{}, LOG_HTTP_LEVEL)
httpLog.registerFileLogger("http_dump", f, f, LOG_HTTP_DUMP_FILE, formatter, LOG_HTTP_LEVEL)
}
}

Expand Down
16 changes: 9 additions & 7 deletions src/logger/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ func openLogFile(fileName string) (*os.File, error) {
}

type bufWriter struct {
fileName string
w *bufio.Writer
wLock sync.Mutex
data chan []byte // channel used as a write queue to smooth periodic flush peak
Expand All @@ -108,12 +109,13 @@ type bufWriter struct {
done chan *struct{}
}

func newBufWriter(w io.Writer) *bufWriter {
func newBufWriter(w io.Writer, fileName string) *bufWriter {
bw := &bufWriter{
w: bufio.NewWriterSize(w, 512), // block size for general VFS
data: make(chan []byte, 2048),
stop: make(chan struct{}),
done: make(chan *struct{}),
fileName: fileName,
w: bufio.NewWriterSize(w, 512), // block size for general VFS
data: make(chan []byte, 2048),
stop: make(chan struct{}),
done: make(chan *struct{}),
}

flusher := func() {
Expand Down Expand Up @@ -164,7 +166,7 @@ func (bw *bufWriter) Close() {
}

for len(bw.data) > 0 {
Debugf("[spin to wait log data writes completely]")
Debugf("[spin to wait flushing log data to %s]", bw.fileName)
time.Sleep(time.Millisecond)
}

Expand Down Expand Up @@ -195,7 +197,7 @@ func openBufferedLogFile(fileName string) (*os.File, io.Writer, error) {
return nil, nil, err
}

out := newBufWriter(f)
out := newBufWriter(f, fileName)

return f, out, nil
}
Expand Down
1 change: 1 addition & 0 deletions src/logger/memberlist.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ func initMemberList() {
LOG_MEMBERLIST_TTY_LEVEL = logrus.InfoLevel
LOG_MEMBERLIST_LEVEL = logrus.InfoLevel
}

formatter := &logrus.TextFormatter{
FullTimestamp: true,
}
Expand Down
5 changes: 3 additions & 2 deletions src/logger/std.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@ func initStd() {
LOG_STD_LEVEL = logrus.InfoLevel
LOG_STD_TTY_LEVEL = logrus.InfoLevel
}

formatter := &logrus.TextFormatter{
FullTimestamp: true,
}

std.registerIOLogger("stdio", os.Stdout, formatter, LOG_STD_TTY_LEVEL)

f, err := openLogFile(LOG_STD_FILE)
f, out, err := openBufferedLogFile(LOG_STD_FILE)
if err != nil {
Errorf("[open log file %s failed: %v]", LOG_STD_FILE, err)
} else {
std.registerFileLogger("stdio", f, f, LOG_STD_FILE, formatter, LOG_STD_LEVEL)
std.registerFileLogger("stdio", f, out, LOG_STD_FILE, formatter, LOG_STD_LEVEL)
}
}

Expand Down

0 comments on commit 4ec376d

Please sign in to comment.