初始提交: Gitea 项目代码
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
// Copyright 2019 The Gitea Authors. All rights reserved.
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
package log
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
)
|
||||
|
||||
var statusToColor = map[int][]ColorAttribute{
|
||||
100: {Bold},
|
||||
200: {FgGreen},
|
||||
300: {FgYellow},
|
||||
304: {FgCyan},
|
||||
400: {Bold, FgRed},
|
||||
401: {Bold, FgMagenta},
|
||||
403: {Bold, FgMagenta},
|
||||
500: {Bold, BgRed},
|
||||
}
|
||||
|
||||
// ColoredStatus adds colors for HTTP status
|
||||
func ColoredStatus(status int, s ...string) *ColoredValue {
|
||||
color, ok := statusToColor[status]
|
||||
if !ok {
|
||||
color, ok = statusToColor[(status/100)*100]
|
||||
}
|
||||
if !ok {
|
||||
color = []ColorAttribute{Bold}
|
||||
}
|
||||
if len(s) > 0 {
|
||||
return NewColoredValue(s[0], color...)
|
||||
}
|
||||
return NewColoredValue(status, color...)
|
||||
}
|
||||
|
||||
var methodToColor = map[string][]ColorAttribute{
|
||||
"GET": {FgBlue},
|
||||
"POST": {FgGreen},
|
||||
"DELETE": {FgRed},
|
||||
"PATCH": {FgCyan},
|
||||
"PUT": {FgYellow, Faint},
|
||||
"HEAD": {FgBlue, Faint},
|
||||
}
|
||||
|
||||
// ColoredMethod adds colors for HTTP methods on log
|
||||
func ColoredMethod(method string) *ColoredValue {
|
||||
color, ok := methodToColor[method]
|
||||
if !ok {
|
||||
return NewColoredValue(method, Bold)
|
||||
}
|
||||
return NewColoredValue(method, color...)
|
||||
}
|
||||
|
||||
var (
|
||||
durations = []time.Duration{
|
||||
10 * time.Millisecond,
|
||||
100 * time.Millisecond,
|
||||
1 * time.Second,
|
||||
5 * time.Second,
|
||||
10 * time.Second,
|
||||
}
|
||||
|
||||
durationColors = [][]ColorAttribute{
|
||||
{FgGreen},
|
||||
{Bold},
|
||||
{FgYellow},
|
||||
{FgRed, Bold},
|
||||
{BgRed},
|
||||
}
|
||||
|
||||
wayTooLong = BgMagenta
|
||||
)
|
||||
|
||||
// ColoredTime converts the provided time to a ColoredValue for logging. The duration is always formatted in milliseconds.
|
||||
func ColoredTime(duration time.Duration) *ColoredValue {
|
||||
// the output of duration in Millisecond is more readable:
|
||||
// * before: "100.1ms" "100.1μs" "100.1s"
|
||||
// * better: "100.1ms" "0.1ms" "100100.0ms", readers can compare the values at first glance.
|
||||
str := fmt.Sprintf("%.1fms", float64(duration.Microseconds())/1000)
|
||||
for i, k := range durations {
|
||||
if duration < k {
|
||||
return NewColoredValue(str, durationColors[i]...)
|
||||
}
|
||||
}
|
||||
return NewColoredValue(str, wayTooLong)
|
||||
}
|
||||
Reference in New Issue
Block a user