|
|
@@ -1,20 +1,67 @@
|
|
|
-// utils/logger.go
|
|
|
package utils
|
|
|
|
|
|
import (
|
|
|
+ "os"
|
|
|
+ "path/filepath"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ "github.com/natefinch/lumberjack"
|
|
|
"github.com/sirupsen/logrus"
|
|
|
)
|
|
|
|
|
|
var Logger *logrus.Logger
|
|
|
|
|
|
-func InitLogger(level string) {
|
|
|
+func InitLogger(logDir string, levelConf string) {
|
|
|
Logger = logrus.New()
|
|
|
- Logger.SetFormatter(&logrus.JSONFormatter{})
|
|
|
|
|
|
- logLevel, err := logrus.ParseLevel(level)
|
|
|
+ // 获取项目根目录路径
|
|
|
+ projectRoot, err := os.Getwd()
|
|
|
if err != nil {
|
|
|
- Logger.SetLevel(logrus.InfoLevel)
|
|
|
- } else {
|
|
|
- Logger.SetLevel(logLevel)
|
|
|
+ panic(err)
|
|
|
+ }
|
|
|
+
|
|
|
+ // 组合日志目录路径
|
|
|
+ logPath := filepath.Join(projectRoot, logDir)
|
|
|
+
|
|
|
+ // 确保日志目录存在
|
|
|
+ if err := os.MkdirAll(logPath, 0755); err != nil {
|
|
|
+ panic(err)
|
|
|
}
|
|
|
+
|
|
|
+ logFile := filepath.Join(logPath, "policy-service.log")
|
|
|
+
|
|
|
+ // 配置日志切割
|
|
|
+ lumberjackLogger := &lumberjack.Logger{
|
|
|
+ Filename: logFile,
|
|
|
+ MaxSize: 100, // 每个日志文件最大100MB
|
|
|
+ MaxBackups: 30, // 保留30个旧日志文件
|
|
|
+ MaxAge: 30, // 保留30天
|
|
|
+ Compress: true, // 压缩旧日志
|
|
|
+ LocalTime: true, // 使用本地时间切割
|
|
|
+ }
|
|
|
+
|
|
|
+ Logger.SetOutput(lumberjackLogger)
|
|
|
+ Logger.SetFormatter(&logrus.JSONFormatter{})
|
|
|
+
|
|
|
+ // 从环境变量获取日志级别,默认为info
|
|
|
+ if levelConf == "" {
|
|
|
+ levelConf = "info"
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分割多个级别
|
|
|
+ levelStrs := strings.Split(levelConf, ",")
|
|
|
+ var levels []logrus.Level
|
|
|
+ for _, lvlStr := range levelStrs {
|
|
|
+ level, err := logrus.ParseLevel(strings.TrimSpace(lvlStr))
|
|
|
+ if err != nil {
|
|
|
+ Logger.Warnf("无效的日志级别%s,跳过", lvlStr)
|
|
|
+ continue
|
|
|
+ }
|
|
|
+ levels = append(levels, level)
|
|
|
+ }
|
|
|
+
|
|
|
+ if len(levels) == 0 {
|
|
|
+ levels = []logrus.Level{logrus.InfoLevel} // 默认级别
|
|
|
+ }
|
|
|
+
|
|
|
}
|