/
log.go
107 lines (95 loc) · 2.33 KB
/
log.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package log
import (
"os"
"strconv"
"github.com/mash/go-accesslog"
"github.com/natefinch/lumberjack"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func NewLogger(logLevel string, logFilename string, logMaxSize int, logMaxBackups int, logMaxAge int, logCompress bool) *zap.Logger {
var ll zapcore.Level
switch logLevel {
case "DEBUG":
ll = zap.DebugLevel
case "INFO":
ll = zap.InfoLevel
case "WARN", "WARNING":
ll = zap.WarnLevel
case "ERR", "ERROR":
ll = zap.WarnLevel
case "DPANIC":
ll = zap.DPanicLevel
case "PANIC":
ll = zap.PanicLevel
case "FATAL":
ll = zap.FatalLevel
}
var ws zapcore.WriteSyncer
switch logFilename {
case "", os.Stderr.Name():
ws = zapcore.AddSync(os.Stderr)
case os.Stdout.Name():
ws = zapcore.AddSync(os.Stdout)
default:
ws = zapcore.AddSync(
&lumberjack.Logger{
Filename: logFilename,
MaxSize: logMaxSize, // megabytes
MaxBackups: logMaxBackups,
MaxAge: logMaxAge, // days
Compress: logCompress,
},
)
}
ec := zap.NewProductionEncoderConfig()
ec.TimeKey = "_timestamp_"
ec.LevelKey = "_level_"
ec.NameKey = "_name_"
ec.CallerKey = "_caller_"
ec.MessageKey = "_message_"
ec.StacktraceKey = "_stacktrace_"
ec.EncodeTime = zapcore.ISO8601TimeEncoder
ec.EncodeCaller = zapcore.ShortCallerEncoder
logger := zap.New(
zapcore.NewCore(
zapcore.NewJSONEncoder(ec),
ws,
ll,
),
zap.AddCaller(),
//zap.AddStacktrace(ll),
).Named("cete")
return logger
}
type HTTPLogger struct {
Logger *zap.Logger
}
func (l HTTPLogger) Log(record accesslog.LogRecord) {
// Output log that formatted Apache combined.
size := "-"
if record.Size > 0 {
size = strconv.FormatInt(record.Size, 10)
}
referer := "-"
if record.RequestHeader.Get("Referer") != "" {
referer = record.RequestHeader.Get("Referer")
}
userAgent := "-"
if record.RequestHeader.Get("User-Agent") != "" {
userAgent = record.RequestHeader.Get("User-Agent")
}
l.Logger.Info(
"",
zap.String("ip", record.Ip),
zap.String("username", record.Username),
zap.String("time", record.Time.Format("02/Jan/2006 03:04:05 +0000")),
zap.String("method", record.Method),
zap.String("uri", record.Uri),
zap.String("protocol", record.Protocol),
zap.Int("status", record.Status),
zap.String("size", size),
zap.String("referer", referer),
zap.String("user_agent", userAgent),
)
}