Commit b7fd1f4e authored by Abiola Ibrahim's avatar Abiola Ibrahim

FastCGI: separate standard and error output responses.

parent aba0ae35
......@@ -115,7 +115,12 @@ func (h Handler) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error)
return http.StatusBadGateway, err
}
return 0, nil
// FastCGI stderr outputs
if fcgi.stderr.Len() != 0 {
err = LogError(fcgi.stderr.String())
}
return 0, err
}
}
......@@ -281,3 +286,11 @@ var (
// ErrIndexMissingSplit describes an index configuration error.
ErrIndexMissingSplit = errors.New("configured index file(s) must include split value")
)
// LogError is a non fatal error that allows requests to go through.
type LogError string
// Error satisfies error interface.
func (l LogError) Error() string {
return string(l)
}
......@@ -164,6 +164,7 @@ type FCGIClient struct {
rwc io.ReadWriteCloser
h header
buf bytes.Buffer
stderr bytes.Buffer
keepAlive bool
reqID uint16
}
......@@ -346,11 +347,23 @@ func (w *streamReader) Read(p []byte) (n int, err error) {
if len(p) > 0 {
if len(w.buf) == 0 {
// filter outputs for error log
for {
rec := &record{}
w.buf, err = rec.read(w.c.rwc)
var buf []byte
buf, err = rec.read(w.c.rwc)
if err != nil {
return
}
// standard error output
if rec.h.Type == Stderr {
w.c.stderr.Write(buf)
continue
}
w.buf = buf
break
}
}
n = len(p)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment