mirror of https://github.com/gogits/gogs.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
52 lines
1.1 KiB
52 lines
1.1 KiB
// 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/go-martini/martini" |
|
|
|
"github.com/gogits/gogs/modules/base" |
|
) |
|
|
|
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) { |
|
if !base.RouterLog { |
|
return |
|
} |
|
|
|
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;32m%s\033[0m", content) |
|
case 304: |
|
content = fmt.Sprintf("\033[1;33m%s\033[0m", content) |
|
case 404: |
|
content = fmt.Sprintf("\033[1;31m%s\033[0m", content) |
|
case 500: |
|
content = fmt.Sprintf("\033[1;36m%s\033[0m", content) |
|
} |
|
} |
|
log.Println(content) |
|
} |
|
}
|
|
|