package logger
|
|
import (
|
"github.com/natefinch/lumberjack"
|
"go.uber.org/zap"
|
"go.uber.org/zap/zapcore"
|
"os"
|
"strings"
|
"time"
|
)
|
|
type BLog struct {
|
logger *zap.SugaredLogger
|
}
|
|
var (
|
blog *BLog
|
atomicLevel = zap.NewAtomicLevelAt(zapcore.DebugLevel)
|
)
|
|
func (l *BLog) Write(buf []byte) (n int, err error) {
|
l.logger.Debug(strings.Replace(string(buf),"\n","", -1))
|
return len(buf),nil
|
}
|
|
func GetLogFile() *BLog {
|
return blog
|
}
|
|
const (
|
DebugLevel = iota -1
|
InfoLevel
|
WarnLevel
|
ErrorLevel
|
DPanicLevel
|
PanicLevel
|
FatalLevel
|
)
|
|
func InitLogger(logPath string, logLevel int,maxSize int, maxBackups int, maxAge int) {
|
logdir := "./logger/"
|
logName := ""
|
if index := strings.LastIndex(logPath, "/"); index != -1 {
|
logdir = logPath[0:index] + "/"
|
if index < len(logPath)-1 {
|
logName = logPath[index+1:]
|
}
|
} else {
|
logName = logPath
|
}
|
if logName == "" {
|
logName = "log.log"
|
}
|
fi,err := os.Stat(logdir)
|
if !((err == nil || os.IsExist(err)) && fi.IsDir()) {
|
os.MkdirAll(logdir, os.ModePerm)
|
}
|
if logLevel < DebugLevel || logLevel > FatalLevel {
|
logLevel = DebugLevel
|
}
|
if maxSize <=0 {
|
maxSize = 128
|
}
|
if maxBackups <=0 {
|
maxBackups = 30
|
}
|
if maxAge <= 0 {
|
maxAge = 15
|
}
|
hook := lumberjack.Logger {
|
Filename: logdir+logName, //日志文件的位置
|
MaxSize: maxSize, //在进行切割之前,日志文件的最大大小(以MB为单位)
|
MaxBackups: maxBackups, //保留旧文件的最大个数
|
MaxAge: maxAge, //保留旧文件的最大天数
|
Compress: true, //是否压缩
|
LocalTime: true,
|
}
|
w := zapcore.AddSync(&hook)
|
|
atomicLevel = zap.NewAtomicLevelAt(getZapLevel(logLevel))
|
|
encoderConfig := zap.NewProductionEncoderConfig()
|
encoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
encoderConfig.CallerKey = "file"
|
encoderConfig.EncodeCaller = zapcore.ShortCallerEncoder
|
encoderConfig.EncodeTime = func(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
enc.AppendString(t.Format("2006-01-02 15:04:05"))
|
}
|
|
core := zapcore.NewCore(
|
zapcore.NewConsoleEncoder(encoderConfig),
|
w,
|
atomicLevel,
|
)
|
|
log := zap.New(core, zap.AddCaller(), zap.AddCallerSkip(1))
|
|
blog = &BLog{
|
logger: log.Sugar(),
|
}
|
blog.logger.Info("init logger success")
|
}
|
|
func getZapLevel(logLevel int) zapcore.Level {
|
var level zapcore.Level
|
switch logLevel {
|
case DebugLevel:
|
level = zap.DebugLevel
|
case InfoLevel:
|
level = zap.InfoLevel
|
case WarnLevel:
|
level = zap.WarnLevel
|
case ErrorLevel:
|
level = zap.ErrorLevel
|
case DPanicLevel:
|
level = zap.DPanicLevel
|
case PanicLevel:
|
level = zap.PanicLevel
|
case FatalLevel:
|
level = zap.FatalLevel
|
default:
|
level = zap.InfoLevel
|
}
|
return level
|
}
|
|
func SetLevel(lv int) error {
|
atomicLevel.SetLevel(getZapLevel(lv))
|
return nil
|
}
|
|
func Debug(v ...interface{}) {
|
blog.logger.Debug(v...)
|
}
|
|
func Debugf(template string, v ...interface{}) {
|
blog.logger.Debugf(template, v...)
|
}
|
|
func Info(v ...interface{}) {
|
blog.logger.Info(v)
|
}
|
|
func Infof(template string, v ...interface{}) {
|
blog.logger.Infof(template, v...)
|
}
|
|
func Warn(v ...interface{}) {
|
blog.logger.Warn(v...)
|
}
|
|
func Warnf(template string, v ...interface{}) {
|
blog.logger.Warnf(template, v...)
|
}
|
|
func Error(v ...interface{}) {
|
blog.logger.Error(v...)
|
}
|
|
func Errorf(template string, v ...interface{}) {
|
blog.logger.Errorf(template, v...)
|
}
|
|
func Fatal(v ...interface{}) {
|
blog.logger.Fatal(v...)
|
}
|
|
func Fatalf(template string, v ...interface{}) {
|
blog.logger.Fatalf(template, v...)
|
}
|