Skip to content

Commit

Permalink
update logger
Browse files Browse the repository at this point in the history
  • Loading branch information
zhimin.he committed Mar 25, 2015
1 parent f682b57 commit be93fef
Show file tree
Hide file tree
Showing 12 changed files with 78 additions and 366 deletions.
4 changes: 2 additions & 2 deletions context.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,15 +111,15 @@ func initContext(r *http.Request, w http.ResponseWriter, s *Server) *Context {
Request: r,
Server: s,
Config: s.Config,
Logger: s.Logger,
Logger: s.logger,
Params: map[string]string{},
Data: map[string]interface{}{},
staticData: map[string][]string{},
}
ctx.parseParams()
ctx.isInited = true
context.Set(r, CONTEXT_KEY, ctx)
s.Logger.Debugf("init context, &r=%p", r)
s.logger.Debugf("init context, &r=%p", r)
return ctx
}

Expand Down
39 changes: 38 additions & 1 deletion log.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package xingyun

import (
"io"
"log"
)

type Logger interface {
Infof(s string, o ...interface{})
Errorf(s string, o ...interface{})
Warnf(s string, o ...interface{})
Debugf(s string, o ...interface{})
Warnf(s string, o ...interface{})
Tracef(s string, o ...interface{})
}

Expand All @@ -24,3 +29,35 @@ func (l *debugLogger) Tracef(s string, o ...interface{}) {
l.Logger.Tracef(s, o...)
}
}

type simpleLevelLogger struct {
l *log.Logger
}

func NewSimpleLevelLogger(w io.Writer) *simpleLevelLogger {
return &simpleLevelLogger{log.New(w, "", log.LstdFlags)}
}

func (l *simpleLevelLogger) output(level, s string, o ...interface{}) {
log.Printf(level+" "+s, o...)
}

func (l *simpleLevelLogger) Infof(s string, o ...interface{}) {
l.output("INFO", s, o...)
}

func (l *simpleLevelLogger) Errorf(s string, o ...interface{}) {
l.output("ERROR", s, o...)
}

func (l *simpleLevelLogger) Warnf(s string, o ...interface{}) {
l.output("WARN", s, o...)
}

func (l *simpleLevelLogger) Debugf(s string, o ...interface{}) {
l.output("DEBUG", s, o...)
}

func (l *simpleLevelLogger) Tracef(s string, o ...interface{}) {
l.output("TRACE", s, o...)
}
4 changes: 2 additions & 2 deletions pipe.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ func newPipe(server *Server, handlers ...PipeHandler) *Pipe {
func (p *Pipe) ServePipe(w http.ResponseWriter, r *http.Request, h http.HandlerFunc) {
switch len(p.Handlers) {
case 0:
p.Server.Logger.Tracef("user handler enter")
p.Server.logger.Tracef("user handler enter")
h.ServeHTTP(w, r)
p.Server.Logger.Tracef("user handler exit")
p.Server.logger.Tracef("user handler exit")
case 1:
handler := p.Handlers[0]
handler.ServePipe(w, r, h)
Expand Down
4 changes: 2 additions & 2 deletions pipe_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

func (s *Server) GetContextPipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter context handler")
defer s.Logger.Tracef("exit context handler")
s.logger.Tracef("enter context handler")
defer s.logger.Tracef("exit context handler")

ctx := initContext(r, w, s)
next(w, r)
Expand Down
4 changes: 2 additions & 2 deletions pipe_error_page.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import "net/http"

func (s *Server) GetErrorPagePipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter error page handler")
defer s.Logger.Tracef("exit error page handler")
s.logger.Tracef("enter error page handler")
defer s.logger.Tracef("exit error page handler")

next(w, r)
ctx := GetContext(r)
Expand Down
10 changes: 5 additions & 5 deletions pipe_logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,20 @@ import (

func (s *Server) GetLogPipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter logger")
defer s.Logger.Tracef("exit logger")
s.logger.Tracef("enter logger")
defer s.logger.Tracef("exit logger")

start := time.Now()
next(w, r)

res := w.(ResponseWriter)
log := s.Logger.Infof
log := s.logger.Infof
status := res.Status()
if status >= 500 && status <= 599 {
log = s.Logger.Errorf
log = s.logger.Errorf
}
if status >= 400 && status <= 499 {
log = s.Logger.Warnf
log = s.logger.Warnf
}
log("%v %s %s %s in %v", res.Status(), r.Method, r.Host, r.URL.Path, time.Since(start))
})
Expand Down
4 changes: 2 additions & 2 deletions pipe_recovery.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ func DefaultPanicHandler(ctx *Context) {

func (s *Server) GetRecoverPipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter recover handler")
s.logger.Tracef("enter recover handler")

defer func() {
if err := recover(); err != nil {
Expand All @@ -35,7 +35,7 @@ func (s *Server) GetRecoverPipeHandler() PipeHandler {
ctx.StackMessage = strings.Join(stacks, "\n")
s.PanicHandler(ctx)
}
s.Logger.Tracef("exit recover handler")
s.logger.Tracef("exit recover handler")
}()

next(w, r)
Expand Down
4 changes: 2 additions & 2 deletions pipe_static.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (

func (s *Server) GetStaticPipeHandler() PipeHandler {
return PipeHandlerFunc(func(rw http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter static handler")
defer s.Logger.Tracef("exit static handler")
s.logger.Tracef("enter static handler")
defer s.logger.Tracef("exit static handler")

cfg := s.Config
if r.Method != "GET" && r.Method != "HEAD" {
Expand Down
8 changes: 4 additions & 4 deletions pipe_url_var_loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,18 @@ import (

func (s *Server) getURLVarLoaderPipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter urlVar loader")
defer s.Logger.Tracef("exit urlVal loader")
s.logger.Tracef("enter urlVar loader")
defer s.logger.Tracef("exit urlVal loader")

ctx := GetContext(r)
urlVars := mux.Vars(r)
for k, v := range urlVars {
_, ok := ctx.Params[k]
if ok {
s.Logger.Warnf("param %s is overide by urlVar", k)
s.logger.Warnf("param %s is overide by urlVar", k)
}
ctx.Params[k] = v
s.Logger.Debugf("load urlVal: %s = %s", k, v)
s.logger.Debugf("load urlVal: %s = %s", k, v)
}

next(w, r)
Expand Down
18 changes: 9 additions & 9 deletions pipe_xsrf.go
Original file line number Diff line number Diff line change
Expand Up @@ -172,8 +172,8 @@ func getXSRFId(ctx *Context, name string) string {

func (s *Server) GetXSRFGeneratePipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter xsrf generater")
defer s.Logger.Tracef("exit xsrf generater")
s.logger.Tracef("enter xsrf generater")
defer s.logger.Tracef("exit xsrf generater")

ctx := GetContext(r)
opts := getXSRFxsrfOptions(s.name(), s.Config)
Expand All @@ -195,13 +195,13 @@ func (s *Server) GetXSRFGeneratePipeHandler() PipeHandler {
// If cookie present, map existing token, else generate a new one.
if val, err := ctx.GetStringCookie(opts.Cookie); err == nil && val != "" {
x.Token = val
s.Logger.Debugf("get xsrf token %s", x.Token)
s.logger.Debugf("get xsrf token %s", x.Token)
} else {
x.Token = xsrftoken.Generate(x.Secret, x.ID, "POST")
if opts.SetCookie {
ctx.SetCookie(opts.Cookie, x.Token)
}
s.Logger.Debugf("generate xsrf token %s", x.Token)
s.logger.Debugf("generate xsrf token %s", x.Token)
}

if opts.SetHeader {
Expand All @@ -214,8 +214,8 @@ func (s *Server) GetXSRFGeneratePipeHandler() PipeHandler {

func (s *Server) GetXSRFValidatePipeHandler() PipeHandler {
return PipeHandlerFunc(func(w http.ResponseWriter, r *http.Request, next http.HandlerFunc) {
s.Logger.Tracef("enter xsrf validater")
defer s.Logger.Tracef("exit xsrf validater")
s.logger.Tracef("enter xsrf validater")
defer s.logger.Tracef("exit xsrf validater")

if r.Method == "GET" || r.Method == "HEAD" {
next(w, r)
Expand All @@ -226,7 +226,7 @@ func (s *Server) GetXSRFValidatePipeHandler() PipeHandler {
x := ctx.xsrf
if token := r.Header.Get(x.GetHeaderName()); token != "" {
if !x.ValidToken(token) {
s.Logger.Debugf("invalid headker token %s", token)
s.logger.Debugf("invalid headker token %s", token)
opts := getXSRFxsrfOptions(s.name(), s.Config)
removeCookie(opts, w, r)
x.Error(w)
Expand All @@ -238,7 +238,7 @@ func (s *Server) GetXSRFValidatePipeHandler() PipeHandler {

if token := r.FormValue(x.GetFormName()); token != "" {
if !x.ValidToken(token) {
s.Logger.Debugf("invalid cookie token %s", token)
s.logger.Debugf("invalid cookie token %s", token)
opts := getXSRFxsrfOptions(s.name(), s.Config)
removeCookie(opts, w, r)
x.Error(w)
Expand All @@ -249,7 +249,7 @@ func (s *Server) GetXSRFValidatePipeHandler() PipeHandler {
return
}

s.Logger.Debugf("can't get token from header or form")
s.logger.Debugf("can't get token from header or form")
opts := getXSRFxsrfOptions(s.name(), s.Config)
removeCookie(opts, w, r)
http.Error(w, "Bad Request", http.StatusBadRequest)
Expand Down
15 changes: 10 additions & 5 deletions server.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"net"
"net/http"
"os"

"github.com/gorilla/securecookie"
)
Expand All @@ -14,7 +15,6 @@ type Server struct {
StaticDir http.FileSystem

Name string
Logger Logger
SecureCookie *securecookie.SecureCookie
DefaultPipeHandlers []PipeHandler
PanicHandler ContextHandlerFunc
Expand All @@ -24,6 +24,7 @@ type Server struct {
pipes map[string]*Pipe
defaultPipe *Pipe
l net.Listener
logger Logger
}

func NewServer(config *Config) *Server {
Expand All @@ -32,7 +33,7 @@ func NewServer(config *Config) *Server {
}
setDefaultConfig(config)
server := &Server{
Logger: &debugLogger{Logger: NewSimpleLevelLogger(1), enableDebug: config.EnableDebug},
logger: &debugLogger{Logger: NewSimpleLevelLogger(os.Stdout), enableDebug: config.EnableDebug},
Config: config,
}
server.PanicHandler = DefaultPanicHandler
Expand All @@ -56,6 +57,10 @@ func NewServer(config *Config) *Server {
return server
}

func (s *Server) SetLogger(l Logger) {
s.logger = &debugLogger{Logger: l, enableDebug: s.Config.EnableDebug}
}

func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
pipeHandlers := []PipeHandler{s.GetContextPipeHandler()}
pipeHandlers = append(pipeHandlers, s.DefaultPipeHandlers...)
Expand Down Expand Up @@ -92,13 +97,13 @@ func (s *Server) name() string {
func (s *Server) ListenAndServe(addr string) error {
l, err := net.Listen("tcp", addr)
if err != nil {
s.Logger.Errorf(err.Error())
s.logger.Errorf(err.Error())
}
s.l = l
s.Logger.Infof("%s start in: %s", s.name(), addr)
s.logger.Infof("%s start in: %s", s.name(), addr)
err = http.Serve(s.l, s)
// todo: must handle error when serve failed
// s.Logger.Errorf("%s stop, err='%s'", err)
// s.logger.Errorf("%s stop, err='%s'", err)
return err
}

Expand Down
Loading

0 comments on commit be93fef

Please sign in to comment.