mirror of
https://gitee.com/samwaf/SamWaf.git
synced 2026-11-01 10:41:43 +08:00
118 lines
3.4 KiB
Go
118 lines
3.4 KiB
Go
package zlog
|
|
|
|
import (
|
|
"SamWaf/global"
|
|
"fmt"
|
|
"go.uber.org/zap"
|
|
"go.uber.org/zap/zapcore"
|
|
"gopkg.in/natefinch/lumberjack.v2"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
"runtime"
|
|
)
|
|
|
|
// 简单封装一下对 zap 日志库的使用
|
|
// 使用方式:
|
|
// zlog.Debug("hello", zap.String("name", "Kevin"), zap.Any("arbitraryObj", dummyObject))
|
|
// zlog.Info("hello", zap.String("name", "Kevin"), zap.Any("arbitraryObj", dummyObject))
|
|
// zlog.Warn("hello", zap.String("name", "Kevin"), zap.Any("arbitraryObj", dummyObject))
|
|
var logger *zap.Logger
|
|
|
|
func init() {
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
|
encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
|
|
encoder := zapcore.NewJSONEncoder(encoderConfig)
|
|
|
|
//file, _ := os.OpenFile("/tmp/test.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 644)
|
|
//fileWriteSyncer = zapcore.AddSync(file)
|
|
fileWriteSyncer := getFileLogWriter()
|
|
|
|
if global.GWAF_RELEASE == "false" {
|
|
core := zapcore.NewTee(
|
|
// 同时向控制台和文件写日志, 生产环境记得把控制台写入去掉
|
|
zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.DebugLevel),
|
|
zapcore.NewCore(encoder, fileWriteSyncer, zapcore.DebugLevel),
|
|
)
|
|
logger = zap.New(core)
|
|
} else {
|
|
core := zapcore.NewTee(
|
|
zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), zapcore.InfoLevel),
|
|
zapcore.NewCore(encoder, fileWriteSyncer, zapcore.InfoLevel),
|
|
zapcore.NewCore(encoder, fileWriteSyncer, zapcore.ErrorLevel),
|
|
zapcore.NewCore(encoder, fileWriteSyncer, zapcore.FatalLevel),
|
|
)
|
|
logger = zap.New(core)
|
|
}
|
|
|
|
}
|
|
|
|
func getFileLogWriter() (writeSyncer zapcore.WriteSyncer) {
|
|
exePath, err := os.Executable()
|
|
if err != nil {
|
|
fmt.Println("Failed to get executable path:", err)
|
|
}
|
|
|
|
exeDir := filepath.Dir(exePath)
|
|
// 使用 lumberjack 实现 log rotate
|
|
lumberJackLogger := &lumberjack.Logger{
|
|
Filename: exeDir + "/logs/log.log",
|
|
MaxSize: 100,
|
|
MaxBackups: 60,
|
|
MaxAge: 1,
|
|
Compress: false,
|
|
}
|
|
|
|
return zapcore.AddSync(lumberJackLogger)
|
|
}
|
|
|
|
func InfoCall(message string, fields ...zap.Field) {
|
|
callerFields := getCallerInfoForLog()
|
|
fields = append(fields, callerFields...)
|
|
logger.Info(message, fields...)
|
|
}
|
|
|
|
func Info(message string, inter ...interface{}) {
|
|
logger.Info(message, zap.Any("info", inter))
|
|
}
|
|
|
|
func DebugCall(message string, fields ...zap.Field) {
|
|
callerFields := getCallerInfoForLog()
|
|
fields = append(fields, callerFields...)
|
|
logger.Debug(message, fields...)
|
|
}
|
|
func Debug(message string, inter ...interface{}) {
|
|
logger.Debug(message, zap.Any("debug", inter))
|
|
}
|
|
|
|
func ErrorCall(message string, fields ...zap.Field) {
|
|
callerFields := getCallerInfoForLog()
|
|
fields = append(fields, callerFields...)
|
|
logger.Error(message, fields...)
|
|
}
|
|
func Error(message string, inter ...interface{}) {
|
|
logger.Error(message, zap.Any("err", inter))
|
|
}
|
|
|
|
func WarnCall(message string, fields ...zap.Field) {
|
|
callerFields := getCallerInfoForLog()
|
|
fields = append(fields, callerFields...)
|
|
logger.Warn(message, fields...)
|
|
}
|
|
func Warn(message string, inter ...interface{}) {
|
|
logger.Warn(message, zap.Any("warn", inter))
|
|
}
|
|
|
|
func getCallerInfoForLog() (callerFields []zap.Field) {
|
|
|
|
pc, file, line, ok := runtime.Caller(2) // 回溯两层,拿到写日志的业务函数的信息
|
|
if !ok {
|
|
return
|
|
}
|
|
funcName := runtime.FuncForPC(pc).Name()
|
|
funcName = path.Base(funcName) //Base函数返回路径的最后一个元素,只保留函数名
|
|
|
|
callerFields = append(callerFields, zap.String("func", funcName), zap.String("file", file), zap.Int("line", line))
|
|
return
|
|
}
|