]> source.dussan.org Git - gitea.git/commitdiff
Use custom logger middleware
authorUnknown <joe2010xtmf@163.com>
Wed, 19 Mar 2014 09:31:38 +0000 (05:31 -0400)
committerUnknown <joe2010xtmf@163.com>
Wed, 19 Mar 2014 09:31:38 +0000 (05:31 -0400)
modules/middleware/logger.go [new file with mode: 0644]
web.go

diff --git a/modules/middleware/logger.go b/modules/middleware/logger.go
new file mode 100644 (file)
index 0000000..9bbedb2
--- /dev/null
@@ -0,0 +1,44 @@
+// Copyright 2014 The Gogs Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package middleware
+
+import (
+       "fmt"
+       "log"
+       "net/http"
+       "runtime"
+       "time"
+
+       "github.com/codegangsta/martini"
+)
+
+var isWindows bool
+
+func init() {
+       isWindows = runtime.GOOS == "windows"
+}
+
+func Logger() martini.Handler {
+       return func(res http.ResponseWriter, req *http.Request, ctx martini.Context, log *log.Logger) {
+               start := time.Now()
+               log.Printf("Started %s %s", req.Method, req.URL.Path)
+
+               rw := res.(martini.ResponseWriter)
+               ctx.Next()
+
+               content := fmt.Sprintf("Completed %v %s in %v", rw.Status(), http.StatusText(rw.Status()), time.Since(start))
+               if !isWindows {
+                       switch rw.Status() {
+                       case 200:
+                               content = fmt.Sprintf("\033[1;32%s\033[0m", content)
+                       case 304:
+                               content = fmt.Sprintf("\033[1;33%s\033[0m", content)
+                       case 404:
+                               content = fmt.Sprintf("\033[1;31%s\033[0m", content)
+                       }
+               }
+               log.Println(content)
+       }
+}
diff --git a/web.go b/web.go
index 018d8ffd79662e243e65884960bca263784ea117..97cfdcc4362f5b263f650e7390e34b883d8f6d9f 100644 (file)
--- a/web.go
+++ b/web.go
@@ -46,11 +46,22 @@ func checkRunMode() {
        log.Info("Run Mode: %s", strings.Title(martini.Env))
 }
 
+func newMartini() *martini.ClassicMartini {
+       r := martini.NewRouter()
+       m := martini.New()
+       m.Use(middleware.Logger())
+       m.Use(martini.Recovery())
+       m.Use(martini.Static("public"))
+       m.MapTo(r, (*martini.Routes)(nil))
+       m.Action(r.Handle)
+       return &martini.ClassicMartini{m, r}
+}
+
 func runWeb(*cli.Context) {
        checkRunMode()
        log.Info("%s %s", base.AppName, base.AppVer)
 
-       m := martini.Classic()
+       m := newMartini()
 
        // Middlewares.
        m.Use(render.Renderer(render.Options{Funcs: []template.FuncMap{base.TemplateFuncs}}))