u
This commit is contained in:
1 parent
755fc20c9a
commit
a57070f860
9 files changed
+557
-93
No files matched your search
@@ -1,49 +1,105 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"log"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/common/hlog"
|
||||
hertzzap "github.com/hertz-contrib/logger/zap"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
)
|
||||
|
||||
func InitLog() {
|
||||
// Customizable output directory.
|
||||
var logFilePath string
|
||||
dir := "./hlog"
|
||||
logFilePath = dir + "/logs/"
|
||||
if err := os.MkdirAll(logFilePath, 0o777); err != nil {
|
||||
log.Println(err.Error())
|
||||
return
|
||||
}
|
||||
dynamicLevel := zap.NewAtomicLevel()
|
||||
|
||||
// Set filename to date
|
||||
logFileName := time.Now().Format("2006-01-02") + ".log"
|
||||
fileName := path.Join(logFilePath, logFileName)
|
||||
if _, err := os.Stat(fileName); err != nil {
|
||||
if _, err := os.Create(fileName); err != nil {
|
||||
log.Println(err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
dynamicLevel.SetLevel(zap.DebugLevel)
|
||||
|
||||
logger := hertzzap.NewLogger(hertzzap.WithCores([]hertzzap.CoreConfig{}))
|
||||
|
||||
lumberjackLogger := &lumberjack.Logger{
|
||||
Filename: fileName,
|
||||
MaxSize: 20, // A file can be up to 20M.
|
||||
MaxBackups: 5, // Save up to 5 files at the same time.
|
||||
MaxAge: 10, // A file can exist for a maximum of 10 days.
|
||||
Compress: true, // Compress with gzip.
|
||||
}
|
||||
|
||||
logger.SetOutput(lumberjackLogger)
|
||||
logger.SetLevel(hlog.LevelDebug)
|
||||
logger := NewLogger(
|
||||
WithCores([]CoreConfig{
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: zapcore.AddSync(os.Stdout),
|
||||
Lvl: dynamicLevel,
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/debug"),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.DebugLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/info"),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.InfoLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/warn"),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.WarnLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/error"),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev >= zap.ErrorLevel
|
||||
}),
|
||||
},
|
||||
}...),
|
||||
)
|
||||
defer logger.Sync()
|
||||
|
||||
hlog.SetLogger(logger)
|
||||
}
|
||||
|
||||
// humanEncoderConfig copy from zap
|
||||
func humanEncoderConfig() zapcore.EncoderConfig {
|
||||
return zapcore.EncoderConfig{
|
||||
MessageKey: "Message",
|
||||
LevelKey: "Level",
|
||||
NameKey: "Name",
|
||||
TimeKey: "Ts",
|
||||
CallerKey: "Caller",
|
||||
FunctionKey: "Func",
|
||||
StacktraceKey: "Stacktrace",
|
||||
LineEnding: "\n",
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
mu sync.Mutex
|
||||
currentDay = make(map[string]string)
|
||||
currentSync = make(map[string]zapcore.WriteSyncer)
|
||||
)
|
||||
|
||||
func getWriteSyncer(basePath string) zapcore.WriteSyncer {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
today := time.Now().Format("2006-01-02")
|
||||
if day, ok := currentDay[basePath]; !ok || day != today {
|
||||
currentDay[basePath] = today
|
||||
file := fmt.Sprintf("%s/%s.log", basePath, today)
|
||||
|
||||
currentSync[basePath] = zapcore.AddSync(&lumberjack.Logger{
|
||||
Filename: file,
|
||||
MaxSize: 10,
|
||||
MaxBackups: 50000,
|
||||
MaxAge: 5,
|
||||
Compress: true,
|
||||
LocalTime: true,
|
||||
})
|
||||
}
|
||||
return currentSync[basePath]
|
||||
}
|
||||
Reference in new issue
Block a user