package logging import ( "fmt" "io" "log" "os" "path/filepath" "runtime" "time" "github.com/gin-gonic/gin" "kpt.xdmy/pkg/file" "kpt.xdmy/pkg/setting" ) type Level int var ( F *os.File DefaultPrefix = "" DefaultCallerDepth = 2 DefaultPath string logger *log.Logger logPrefix = "" levelFlags = []string{"DEBUG", "INFO", "WARN", "ERROR", "FATAL"} ) const ( DEBUG Level = iota INFO WARNING ERROR FATAL ) func Setup() { var err error //tchan :=time.Tick(24*time.Hour) DefaultPath, _ = setting.GetCurrentPath() filePath := DefaultPath + getLogFilePath() fileName := getLogFileName() F, err = file.MustOpen(fileName, filePath) if err != nil { log.Fatalf("logging.Setup err: %v", err) } println(filePath) logger = log.New(F, DefaultPrefix, log.LstdFlags) //gin.DefaultWriter = io.MultiWriter(F, os.Stdout) go func() { defer func() { if err := recover(); err != nil { log.Fatalf("logging.recover err: %v", err) } }() tchan := time.Tick(24 * time.Hour) for { select { case <-tchan: F.Close() //fmt.Println("t1定时器") filePath := DefaultPath + getLogFilePath() fileName := getLogFileName() F, err = file.MustOpen(fileName, filePath) if err != nil { log.Fatalf("logging.Setup err: %v", err) } logger = log.New(F, DefaultPrefix, log.LstdFlags) gin.DefaultWriter = io.MultiWriter(F, os.Stdout) } } }() //// gin log设置 //gin.LoggerWithFormatter(func(param gin.LogFormatterParams) string { // // // 你的自定义格式 // return fmt.Sprintf("%s - [%s] \"%s %s %s %d %s \"%s\" %s\"%s\n", // param.ClientIP, // param.TimeStamp.Format(time.RFC1123), // param.Method, // param.Path, // param.Request.Proto, // param.StatusCode, // param.Latency, // param.Request.UserAgent(), // param.ErrorMessage, // param.Request.Form, // ) //}) } func Debug(v ...interface{}) { setPrefix(DEBUG) logger.Println(v) } func Info(v ...interface{}) { setPrefix(INFO) logger.Println(v) } func Warn(v ...interface{}) { setPrefix(WARNING) logger.Println(v) } func Error(v ...interface{}) { setPrefix(ERROR) logger.Println(v) } func Fatal(v ...interface{}) { setPrefix(FATAL) logger.Fatalln(v) } func setPrefix(level Level) { _, file, line, ok := runtime.Caller(DefaultCallerDepth) if ok { logPrefix = fmt.Sprintf("[%s][%s:%d]", levelFlags[level], filepath.Base(file), line) } else { logPrefix = fmt.Sprintf("[%s]", levelFlags[level]) } logger.SetPrefix(logPrefix) }