79 lines
2.0 KiB
Go
79 lines
2.0 KiB
Go
package main
|
||
|
||
import (
|
||
"backend/common"
|
||
shipcommon "backend/sdk/ship/common"
|
||
"backend/sdk/ship/model/test"
|
||
"backend/sdk/ship/model/tuyou"
|
||
"fmt"
|
||
"io"
|
||
"log"
|
||
"os"
|
||
"time"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
rotatelogs "github.com/lestrrat-go/file-rotatelogs"
|
||
)
|
||
|
||
var (
|
||
rl *rotatelogs.RotateLogs
|
||
logWriter io.Writer
|
||
errWriter io.Writer
|
||
)
|
||
|
||
func init() {
|
||
// 确保日志目录存在
|
||
if err := os.MkdirAll("./log", 0755); err != nil {
|
||
log.Fatalf("failed to create log dir: %v", err)
|
||
}
|
||
|
||
// 使用按天轮转的日志文件,保留最近 30 个文件
|
||
var err error
|
||
rl, err = rotatelogs.New(
|
||
"./log/charge.%Y-%m-%d.log",
|
||
rotatelogs.WithRotationTime(24*time.Hour),
|
||
rotatelogs.WithRotationCount(30),
|
||
)
|
||
if err != nil {
|
||
log.Fatalf("failed to initialize log rotator: %v", err)
|
||
}
|
||
|
||
// 打开一个普通的最新日志文件(不使用 symlink),用于提供固定路径的最新日志
|
||
currFile, err := os.OpenFile("./log/charge.log", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
|
||
if err != nil {
|
||
// 如果打开失败,仍然继续使用轮转器+控制台
|
||
log.Printf("warning: failed to open current log file: %v", err)
|
||
logWriter = io.MultiWriter(rl, os.Stdout)
|
||
errWriter = io.MultiWriter(rl, os.Stderr)
|
||
} else {
|
||
// 同时输出到轮转日志、固定最新日志文件和控制台
|
||
logWriter = io.MultiWriter(rl, currFile, os.Stdout)
|
||
errWriter = io.MultiWriter(rl, currFile, os.Stderr)
|
||
}
|
||
|
||
log.SetOutput(logWriter)
|
||
|
||
// 保持全局默认 writer(以兼容其他调用)
|
||
gin.DefaultWriter = os.Stdout
|
||
gin.DefaultErrorWriter = errWriter
|
||
|
||
common.Init()
|
||
}
|
||
|
||
func main() {
|
||
// 使用 gin.New 并显式注入写入器,确保中间件把日志写到轮转器
|
||
// gin.SetMode(gin.ReleaseMode)
|
||
r := gin.New()
|
||
r.Use(gin.LoggerWithWriter(logWriter))
|
||
r.Use(gin.RecoveryWithWriter(errWriter))
|
||
|
||
ChargeApi := r.Group("/api")
|
||
{
|
||
// 充值发货
|
||
ChargeApi.POST("test/charge", test.Charge)
|
||
ChargeApi.POST("tuyou/charge", tuyou.Charge)
|
||
}
|
||
log.Printf("Ship SDK started on port %d", shipcommon.AppConf.Port)
|
||
r.Run(fmt.Sprintf(":%d", shipcommon.AppConf.Port))
|
||
}
|