Skip to content

Instantly share code, notes, and snippets.

@chy168
Created June 13, 2015 17:54
Show Gist options
  • Save chy168/b9b0aa1193ec8f192f4a to your computer and use it in GitHub Desktop.
Save chy168/b9b0aa1193ec8f192f4a to your computer and use it in GitHub Desktop.
test see log trace depth (go-json-rest)
package main
import (
"fmt"
"net/http"
"github.com/ant0ine/go-json-rest/rest"
log "github.com/cihub/seelog"
)
var appLogger log.LoggerInterface
func main() {
logger, log_err := log.LoggerFromConfigAsString(
`
<seelog minlevel="trace" maxlevel="error">
<outputs formatid="main">
<console />
</outputs>
<formats>
<format id="main" format="%Date(2006/01/02 15:04:05.000) [%Level] %Func %Msg%n"/>
</formats>
</seelog>
`)
if log_err != nil {
fmt.Printf("Logger error: %v", log_err)
panic("Cannot initialize logger from config")
}
appLogger = logger
appLogger.SetAdditionalStackDepth(1)
log.ReplaceLogger(appLogger)
defer log.Flush()
api := rest.NewApi()
var middlewares = []rest.Middleware{
&RequestIdMiddleware{},
&rest.AccessLogApacheMiddleware{
Format: "%t %s %D \"%r\" %u \"%{User-Agent}i\"",
},
&rest.TimerMiddleware{},
&rest.RecorderMiddleware{},
&rest.PoweredByMiddleware{},
&rest.RecoverMiddleware{
EnableResponseStackTrace: true,
},
&rest.JsonIndentMiddleware{},
&rest.ContentTypeCheckerMiddleware{},
}
api.Use(middlewares...)
log.Debug(http.ListenAndServe(":8000", api.MakeHandler()))
}
type RequestIdMiddleware struct {
XRequestIdHeader string
}
// MiddlewareFunc makes PoweredByMiddleware implement the Middleware interface.
func (mw *RequestIdMiddleware) MiddlewareFunc(h rest.HandlerFunc) rest.HandlerFunc {
return func(w rest.ResponseWriter, r *rest.Request) {
request_id := "THIS_IS_UUID"
r.Env["request_id"] = request_id
myLogger := &ApiLogger{appLogger, request_id}
myLogger.Debug("I am runnnnning!")
r.Env["apiLogger"] = myLogger
// call the handler
h(w, r)
}
}
// Customize logger with request-id
type ApiLogger struct {
inner log.LoggerInterface
RequestId string
}
func (sw *ApiLogger) Debug(s string) {
sw.inner.Debugf(sw.RequestId + " " + s)
}
func (sw *ApiLogger) Info(s string) {
sw.inner.Info(sw.RequestId + " " + s)
}
func (sw *ApiLogger) Error(s string) {
sw.inner.Error(sw.RequestId + " " + s)
}
func (sw *ApiLogger) Debugf(format string, params ...interface{}) {
sw.inner.Debugf(sw.RequestId+" "+format, params...)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment