Documentation ¶
Index ¶
- Variables
- func Abbreviate(s string, n int) (string, string)
- func AbbreviateBytes(s []byte, n int) (string, string)
- func AbbreviateBytesEnv(contentType string, s []byte) (string, string)
- func AbbreviateEnv(contentType, s string) (string, string)
- func EnvSize(envName string, defaultValue int) int
- func NewHTTPClient(logger Printfer) *http.Client
- func NewStdLogHTTPClient() *http.Client
- func NewTransport(rt http.RoundTripper, log interface{}) http.RoundTripper
- func StdLogWrapHandler(h http.Handler) http.Handler
- func Unwrap(w http.ResponseWriter) http.ResponseWriter
- func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter
- func WrapHandler(h http.Handler, logger Printfer) http.Handler
- type CloseNotifyFunc
- type FlushFunc
- type HLog
- func (dl *HLog) LogRecover(side string, duration time.Duration, recover interface{}, debugStack []byte)
- func (dl *HLog) LogRequest(side string, r *http.Request)
- func (dl *HLog) LogResponse(side string, req *http.Request, res *http.Response, err error, ...)
- func (dl *HLog) LogWriter(duration time.Duration, status int, header http.Header, payload string)
- type HTTPRequestLogger
- type HTTPResponseLogger
- type HTTPWriterLogger
- type HeaderFunc
- type HijackFunc
- type Hooks
- type LogWrapper
- type Metrics
- type Printfer
- type PushFunc
- type ReadFromFunc
- type RecoverLogger
- type RoundTripper
- type StdLogger
- type Unwrapper
- type WriteFunc
- type WriteHeaderFunc
Constants ¶
This section is empty.
Variables ¶
var ( // DefaultStdLogTransport wraps http.DefaultTransport to log using std log. DefaultStdLogTransport = NewTransport(http.DefaultTransport, HLog{Printfer: StdLogger{}}) // DefaultLoggusTransport wraps http.DefaultTransport to log using logrus. DefaultLoggusTransport = NewTransport(http.DefaultTransport, HLog{Printfer: logrus.StandardLogger()}) )
Functions ¶
func AbbreviateEnv ¶
func NewHTTPClient ¶
NewHTTPClient creates a new *http.Client with logging.
func NewStdLogHTTPClient ¶
NewStdLogHTTPClient creates a new *http.Client with log.
func NewTransport ¶
func NewTransport(rt http.RoundTripper, log interface{}) http.RoundTripper
NewTransport takes a http.RoundTripper and returns a new one that logs requests and responses
func StdLogWrapHandler ¶
StdLogWrapHandler wraps a http.Handler for logging.
func Unwrap ¶
func Unwrap(w http.ResponseWriter) http.ResponseWriter
Unwrap returns the underlying http.ResponseWriter from within zero or more layers of httpsnoop wrappers.
func Wrap ¶
func Wrap(w http.ResponseWriter, hooks Hooks) http.ResponseWriter
Wrap returns a wrapped version of w that provides the exact same interface as w. Specifically if w implements any combination of:
- http.Flusher - http.CloseNotifier - http.Hijacker - io.ReaderFrom - http.Pusher
The wrapped version will implement the exact same combination. If no hooks are set, the wrapped version also behaves exactly as w. Hooks targeting methods not supported by w are ignored. Any other hooks will intercept the method they target and may modify the call's arguments and/or return values. The CaptureMetrics implementation serves as a working example for how the hooks can be used.
Types ¶
type CloseNotifyFunc ¶
type CloseNotifyFunc func() <-chan bool
CloseNotifyFunc is part of the http.CloseNotifier interface.
type HLog ¶
HLog is a http logger that will use the standard logger in the log package to provide basic information about http responses.
func (*HLog) LogRecover ¶
func (dl *HLog) LogRecover(side string, duration time.Duration, recover interface{}, debugStack []byte)
LogRecover logs the recover information.
func (*HLog) LogRequest ¶
LogRequest logs the request.
type HTTPRequestLogger ¶
HTTPRequestLogger defines the interface to log http request.
type HTTPResponseLogger ¶
type HTTPResponseLogger interface {
LogResponse(side string, req *http.Request, rsp *http.Response, err error, duration time.Duration)
}
HTTPResponseLogger defines the interface to log http response.
type HTTPWriterLogger ¶
type HTTPWriterLogger interface {
LogWriter(duration time.Duration, status int, header http.Header, payload string)
}
HTTPWriterLogger logs the server writer.
type HeaderFunc ¶
HeaderFunc is part of the http.ResponseWriter interface.
type HijackFunc ¶
type HijackFunc func() (net.Conn, *bufio.ReadWriter, error)
HijackFunc is part of the http.Hijacker interface.
type Hooks ¶
type Hooks struct { Header func(HeaderFunc) HeaderFunc WriteHeader func(WriteHeaderFunc) WriteHeaderFunc Write func(WriteFunc) WriteFunc Flush func(FlushFunc) FlushFunc CloseNotify func(CloseNotifyFunc) CloseNotifyFunc Hijack func(HijackFunc) HijackFunc ReadFrom func(ReadFromFunc) ReadFromFunc Push func(PushFunc) PushFunc }
Hooks defines a set of method interceptors for methods included in http.ResponseWriter as well as some others. You can think of them as middleware for the function calls they target. See Wrap for more details.
type LogWrapper ¶
type LogWrapper struct {
Log interface{}
}
LogWrapper is a log wrap to wrap http service.
func NewLogWrapper ¶
func NewLogWrapper(logger Printfer) *LogWrapper
NewLogWrapper creates a new *LogWrapper.
func NewStdLogWrapper ¶
func NewStdLogWrapper() *LogWrapper
NewStdLogWrapper creates a new *LogWrapper.
func (LogWrapper) LogWrap ¶
func (dl LogWrapper) LogWrap(h http.HandlerFunc) http.HandlerFunc
LogWrap wraps a HandlerFunc with logging around.
func (LogWrapper) LogWrapHandler ¶
func (dl LogWrapper) LogWrapHandler(h http.Handler) http.Handler
LogWrapHandler wraps a http.Handler for logging.
func (LogWrapper) ServeHTTP ¶
func (dl LogWrapper) ServeHTTP(w http.ResponseWriter, r *http.Request, h http.HandlerFunc)
type Metrics ¶
type Metrics struct { Header http.Header // Code is the first http response code passed to the WriteHeader func of // the ResponseWriter. If no such call is made, a default code of 200 is // assumed instead. Code int // Duration is the time it took to execute the handler. Duration time.Duration // Written is the number of bytes successfully written by the Write or // ReadFrom function of the ResponseWriter. ResponseWriters may also write // data to their underlaying connection directly (e.g. headers), but those // are not tracked. Therefor the number of Written bytes will usually match // the size of the response body. Written int64 // contains filtered or unexported fields }
Metrics holds metrics captured from CaptureMetrics.
func CaptureMetrics ¶
CaptureMetrics wraps the given hnd, executes it with the given w and r, and returns the metrics it captured from it.
func CaptureMetricsFn ¶
func CaptureMetricsFn(w http.ResponseWriter, fn func(http.ResponseWriter)) Metrics
CaptureMetricsFn wraps w and calls fn with the wrapped w and returns the resulting metrics. This is very similar to CaptureMetrics (which is just sugar on top of this func), but is a more usable interface if your application doesn't use the Go http.Handler interface.
func (*Metrics) CaptureMetrics ¶
func (m *Metrics) CaptureMetrics(w http.ResponseWriter, fn func(http.ResponseWriter))
CaptureMetrics wraps w and calls fn with the wrapped w and updates Metrics m with the resulting metrics. This is similar to CaptureMetricsFn, but allows one to customize starting Metrics object.
type Printfer ¶
type Printfer interface {
Printf(format string, v ...interface{})
}
Printfer is the interface to print log.
type PushFunc ¶
type PushFunc func(target string, opts *http.PushOptions) error
PushFunc is part of the http.Pusher interface.
type ReadFromFunc ¶
ReadFromFunc is part of the io.ReaderFrom interface.
type RecoverLogger ¶
type RecoverLogger interface {
LogRecover(side string, duration time.Duration, recover interface{}, debugStack []byte)
}
RecoverLogger logs the recover info.
type RoundTripper ¶
type RoundTripper struct { http.RoundTripper Log interface{} }
type Unwrapper ¶
type Unwrapper interface {
Unwrap() http.ResponseWriter
}
type WriteHeaderFunc ¶
type WriteHeaderFunc func(code int)
WriteHeaderFunc is part of the http.ResponseWriter interface.