- 后端从 Python FastAPI 重写为 Go Gin(端口 56789) - 多班级完全隔离 - 超级管理员独立登录 - 课代表作业管理、排行榜分项排行 - 角色加减分上下限可配置 - 家长改密功能(可开关) - 周度/月度重置功能 - MySQL 5.7 兼容 - 43轮代码审查+全部修复 - Apache 2.0 许可证
65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
package logger
|
||
|
||
import (
|
||
"os"
|
||
|
||
"go.uber.org/zap"
|
||
"go.uber.org/zap/zapcore"
|
||
)
|
||
|
||
// Log 全局日志实例
|
||
var Log *zap.Logger
|
||
|
||
// Sugared 全局 SugaredLogger(便捷方法)
|
||
var Sugared *zap.SugaredLogger
|
||
|
||
// Init 初始化日志
|
||
func Init(level string, isProduction bool) {
|
||
var zapLevel zapcore.Level
|
||
switch level {
|
||
case "debug":
|
||
zapLevel = zapcore.DebugLevel
|
||
case "info":
|
||
zapLevel = zapcore.InfoLevel
|
||
case "warn":
|
||
zapLevel = zapcore.WarnLevel
|
||
case "error":
|
||
zapLevel = zapcore.ErrorLevel
|
||
default:
|
||
zapLevel = zapcore.InfoLevel
|
||
}
|
||
|
||
encoderCfg := zap.NewProductionEncoderConfig()
|
||
encoderCfg.TimeKey = "time"
|
||
encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder
|
||
encoderCfg.EncodeLevel = zapcore.CapitalLevelEncoder
|
||
|
||
var core zapcore.Core
|
||
if isProduction {
|
||
// 生产环境:JSON 格式输出到 stdout
|
||
core = zapcore.NewCore(
|
||
zapcore.NewJSONEncoder(encoderCfg),
|
||
zapcore.Lock(os.Stdout),
|
||
zapLevel,
|
||
)
|
||
} else {
|
||
// 开发环境:Console 格式输出
|
||
encoderCfg.EncodeLevel = zapcore.CapitalColorLevelEncoder
|
||
core = zapcore.NewCore(
|
||
zapcore.NewConsoleEncoder(encoderCfg),
|
||
zapcore.Lock(os.Stdout),
|
||
zapLevel,
|
||
)
|
||
}
|
||
|
||
Log = zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
|
||
Sugared = Log.Sugar()
|
||
}
|
||
|
||
// Sync 刷新日志缓冲区
|
||
func Sync() {
|
||
if Log != nil {
|
||
_ = Log.Sync()
|
||
}
|
||
}
|