This commit is contained in:
2025-11-14 12:11:44 +08:00
commit 39ebf61572
88 changed files with 9999 additions and 0 deletions

View File

@@ -0,0 +1,66 @@
package logging
import (
"fmt"
"io"
"os"
"path/filepath"
"time"
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
"github.com/any-hub/any-hub/internal/config"
)
// InitLogger 根据全局配置初始化 JSON 结构化日志,确保文件/控制台输出一致。
func InitLogger(cfg config.GlobalConfig) (*logrus.Logger, error) {
level, err := logrus.ParseLevel(cfg.LogLevel)
if err != nil {
return nil, fmt.Errorf("无法解析日志级别: %w", err)
}
output, outErr := buildOutput(cfg)
if outErr != nil {
fmt.Fprintf(os.Stderr, "logger_fallback: %v\n", outErr)
}
logger := logrus.New()
logger.SetLevel(level)
logger.SetOutput(output)
logger.SetFormatter(&logrus.JSONFormatter{TimestampFormat: time.RFC3339Nano})
logrus.SetFormatter(logger.Formatter)
logrus.SetOutput(logger.Out)
logrus.SetLevel(logger.GetLevel())
if outErr != nil {
logger.WithFields(logrus.Fields{
"action": "logger_fallback",
"path": cfg.LogFilePath,
}).Warn(outErr.Error())
}
return logger, nil
}
// buildOutput 根据配置创建日志输出 Writer失败时降级到 stdout 并返回错误。
func buildOutput(cfg config.GlobalConfig) (io.Writer, error) {
if cfg.LogFilePath == "" {
return os.Stdout, nil
}
dir := filepath.Dir(cfg.LogFilePath)
if err := os.MkdirAll(dir, 0o755); err != nil {
return os.Stdout, fmt.Errorf("创建日志目录失败: %w", err)
}
rotator := &lumberjack.Logger{
Filename: cfg.LogFilePath,
MaxSize: cfg.LogMaxSize,
MaxBackups: cfg.LogMaxBackups,
Compress: cfg.LogCompress,
LocalTime: true,
}
return rotator, nil
}