Initial commit: TaskPool React panel
- React frontend with route-level code splitting - Backend rebranded from Baihu to TaskPool - DB brand migration script and local compatibility
This commit is contained in:
+107
@@ -0,0 +1,107 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/engigu/taskpool/internal/systime"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
"gopkg.in/natefinch/lumberjack.v2"
|
||||
)
|
||||
|
||||
// 日志实例
|
||||
var loggerInstance *zap.Logger
|
||||
var log *zap.SugaredLogger
|
||||
|
||||
// ANSI 颜色代码
|
||||
const (
|
||||
colorReset = "\033[0m"
|
||||
colorRed = "\033[31m"
|
||||
colorYellow = "\033[33m"
|
||||
colorBlue = "\033[36m"
|
||||
colorGray = "\033[37m"
|
||||
)
|
||||
|
||||
// customCore 实现 zapcore.Core 以提供与 logrus 一模一样的格式
|
||||
type customCore struct {
|
||||
level zapcore.LevelEnabler
|
||||
writer zapcore.WriteSyncer
|
||||
}
|
||||
|
||||
func (c *customCore) Enabled(l zapcore.Level) bool {
|
||||
return c.level.Enabled(l)
|
||||
}
|
||||
|
||||
func (c *customCore) With(fields []zapcore.Field) zapcore.Core {
|
||||
return c
|
||||
}
|
||||
|
||||
func (c *customCore) Check(ent zapcore.Entry, ce *zapcore.CheckedEntry) *zapcore.CheckedEntry {
|
||||
if c.Enabled(ent.Level) {
|
||||
return ce.AddCore(ent, c)
|
||||
}
|
||||
return ce
|
||||
}
|
||||
|
||||
func (c *customCore) Write(ent zapcore.Entry, fields []zapcore.Field) error {
|
||||
// 统一使用东八区时间
|
||||
timestamp := systime.InCST(ent.Time).Format("2006-01-02 15:04:05")
|
||||
level := strings.ToUpper(ent.Level.String())
|
||||
|
||||
var levelColor string
|
||||
switch ent.Level {
|
||||
case zapcore.DebugLevel:
|
||||
levelColor = colorGray
|
||||
case zapcore.InfoLevel:
|
||||
levelColor = colorBlue
|
||||
case zapcore.WarnLevel:
|
||||
levelColor = colorYellow
|
||||
case zapcore.ErrorLevel, zapcore.DPanicLevel, zapcore.PanicLevel, zapcore.FatalLevel:
|
||||
levelColor = colorRed
|
||||
default:
|
||||
levelColor = colorBlue
|
||||
}
|
||||
|
||||
msg := fmt.Sprintf("[%s]%s[%s]%s %s\n", timestamp, levelColor, level, colorReset, ent.Message)
|
||||
_, err := c.writer.Write([]byte(msg))
|
||||
return err
|
||||
}
|
||||
|
||||
func (c *customCore) Sync() error {
|
||||
return c.writer.Sync()
|
||||
}
|
||||
|
||||
func initLogger(logFile string, fileOnly bool) {
|
||||
logDir := filepath.Dir(logFile)
|
||||
if logDir != "" && logDir != "." {
|
||||
os.MkdirAll(logDir, 0755)
|
||||
}
|
||||
|
||||
lumberjackLogger := &lumberjack.Logger{
|
||||
Filename: logFile,
|
||||
MaxSize: 5,
|
||||
MaxBackups: 3,
|
||||
MaxAge: 0,
|
||||
Compress: false,
|
||||
}
|
||||
|
||||
var output zapcore.WriteSyncer
|
||||
// fileOnly 模式下只输出到文件(daemon 模式或重启模式)
|
||||
if fileOnly {
|
||||
output = zapcore.AddSync(lumberjackLogger)
|
||||
} else {
|
||||
// 前台运行时同时输出到终端和文件
|
||||
output = zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout), zapcore.AddSync(lumberjackLogger))
|
||||
}
|
||||
|
||||
core := &customCore{
|
||||
level: zap.NewAtomicLevelAt(zap.InfoLevel),
|
||||
writer: output,
|
||||
}
|
||||
|
||||
loggerInstance = zap.New(core)
|
||||
log = loggerInstance.Sugar()
|
||||
}
|
||||
Reference in New Issue
Block a user