Merge pull request #429 from abiosoft/php-error-log

fastcgi: separate standard and error output responses.
This commit is contained in:
Matt Holt 2015-12-14 10:14:52 -07:00
commit f11cd4d9dd
2 changed files with 32 additions and 5 deletions

View File

@ -115,7 +115,13 @@ 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 {
// Remove trailing newline, error logger already does this.
err = LogError(strings.TrimSuffix(fcgi.stderr.String(), "\n"))
}
return resp.StatusCode, err
}
}
@ -281,3 +287,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)
}

View File

@ -164,6 +164,7 @@ type FCGIClient struct {
rwc io.ReadWriteCloser
h header
buf bytes.Buffer
stderr bytes.Buffer
keepAlive bool
reqID uint16
}
@ -346,10 +347,22 @@ func (w *streamReader) Read(p []byte) (n int, err error) {
if len(p) > 0 {
if len(w.buf) == 0 {
rec := &record{}
w.buf, err = rec.read(w.c.rwc)
if err != nil {
return
// filter outputs for error log
for {
rec := &record{}
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
}
}