初始化项目

This commit is contained in:
BBIT-Kai
2026-05-26 13:53:23 +08:00
commit 7e803e2cdb
27 changed files with 1820 additions and 0 deletions
+110
View File
@@ -0,0 +1,110 @@
package log
import (
"fmt"
"os"
"path/filepath"
"sentinel/pkg/config"
"time"
)
var logDir = "./logs" // 日志目录,可根据需要修改
// 初始化日志目录
func Init(dir string) {
if dir != "" {
logDir = dir
}
if err := os.MkdirAll(logDir, 0755); err != nil {
fmt.Println("create log dir failed:", err)
}
go func() {
ticker := time.NewTicker(config.LOG_CHECK_INTERVAL_HOURS * time.Hour)
defer ticker.Stop()
for range ticker.C {
cleanupOldLogs()
}
}()
}
// Cleanup 删除超过7天的日志文件
func cleanupOldLogs() {
files, err := os.ReadDir(logDir)
if err != nil {
return
}
cutoff := time.Now().AddDate(0, 0, -7)
for _, f := range files {
if f.IsDir() {
continue
}
info, err := f.Info()
if err != nil {
continue
}
if info.ModTime().Before(cutoff) {
_ = os.Remove(filepath.Join(logDir, f.Name()))
}
}
}
// log 内部写文件
func logToFile(level, msg string) {
fmt.Println(msg)
t := time.Now()
// 确保日志目录存在
if err := os.MkdirAll(logDir, 0755); err != nil {
fmt.Println("create log dir failed:", err)
return
}
filename := filepath.Join(logDir, t.Format("2006-01-02")+".log")
f, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
fmt.Println("open log file failed:", err)
return
}
defer f.Close()
line := fmt.Sprintf("%s [%s] %s\n", t.Format("2006-01-02 15:04:05"), level, msg)
_, _ = f.WriteString(line)
}
// 对外接口
func Info(msg string) {
logToFile("INFO", msg)
}
// Println 支持多个参数拼接,写 INFO 日志
func Println(v ...interface{}) {
msg := fmt.Sprint(v...)
logToFile("INFO", msg)
}
func Debug(v ...interface{}) {
//msg := fmt.Sprint(v...)
//logToFile("DEBUF", msg)
}
func Warn(msg string) {
logToFile("WARN", msg)
}
func Error(msg string) {
logToFile("ERROR", msg)
}
func Fatal(err error) {
if err == nil {
return
}
logToFile("ERROR", err.Error())
}
// Fatal 打印错误日志并退出程序
func Fatalf(msg string, args ...interface{}) {
if len(args) > 0 {
msg = fmt.Sprintf(msg, args...)
}
logToFile("FATAL", msg)
os.Exit(1)
}