From 51f179f9e9a85ee1cb12b672176766bb23a4a3fb Mon Sep 17 00:00:00 2001 From: WJQSERVER Date: Mon, 30 Dec 2024 09:07:54 +0800 Subject: [PATCH] (api, auth, main, proxy, rate): Replace the logger library with an external library and optimize log handling. --- CHANGELOG.md | 5 ++ api/api.go | 2 +- auth/auth.go | 2 +- go.mod | 1 + go.sum | 2 + logger/logger.go | 175 ----------------------------------------------- main.go | 3 +- proxy/proxy.go | 2 +- rate/rate.go | 2 +- 9 files changed, 14 insertions(+), 180 deletions(-) delete mode 100644 logger/logger.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 19a8eb6..503fb90 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # 更新日志 +24w28b +--- +- PRE-RELEASE: 此版本是v1.7.9的预发布版本,请勿在生产环境中使用 +- CHANGE: 将`logger`库作为外部库引入, 使维护性更好, 同时修正了部分日志问题并提升部分性能 + 24w28a --- - PRE-RELEASE: 此版本是v1.7.9的预发布版本,请勿在生产环境中使用 diff --git a/api/api.go b/api/api.go index 27f5bac..9d2f59e 100644 --- a/api/api.go +++ b/api/api.go @@ -3,8 +3,8 @@ package api import ( "encoding/json" "ghproxy/config" - "ghproxy/logger" + "github.com/WJQSERVER-STUDIO/go-utils/logger" "github.com/gin-gonic/gin" ) diff --git a/auth/auth.go b/auth/auth.go index 281eeff..643661a 100644 --- a/auth/auth.go +++ b/auth/auth.go @@ -2,8 +2,8 @@ package auth import ( "ghproxy/config" - "ghproxy/logger" + "github.com/WJQSERVER-STUDIO/go-utils/logger" "github.com/gin-gonic/gin" ) diff --git a/go.mod b/go.mod index 7a38872..1c64a98 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,7 @@ require ( ) require ( + github.com/WJQSERVER-STUDIO/go-utils/logger v1.1.0 // indirect github.com/andybalholm/brotli v1.1.1 // indirect github.com/bytedance/sonic v1.12.6 // indirect github.com/bytedance/sonic/loader v0.2.1 // indirect diff --git a/go.sum b/go.sum index 2d59abe..cc84f74 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,7 @@ github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/WJQSERVER-STUDIO/go-utils/logger v1.1.0 h1:OUrAOWb8xK0kxpWextJYUasmol+5KKqG2az52X2ae64= +github.com/WJQSERVER-STUDIO/go-utils/logger v1.1.0/go.mod h1:sAqHVYSucoUnycyHMAZc1fMH5dS2bQwgwo8NUiAIcyk= github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= github.com/bytedance/sonic v1.12.6 h1:/isNmCUF2x3Sh8RAp/4mh4ZGkcFAX/hLrzrK3AvpRzk= diff --git a/logger/logger.go b/logger/logger.go deleted file mode 100644 index 5e2f2b6..0000000 --- a/logger/logger.go +++ /dev/null @@ -1,175 +0,0 @@ -package logger - -import ( - "archive/tar" - "compress/gzip" - "fmt" - "io" - "log" - "os" - "path/filepath" - "sync" - "time" -) - -var ( - logw = Logw - logFile *os.File - logger *log.Logger - logChannel = make(chan string, 100) - quitChannel = make(chan struct{}) - logFileMutex sync.Mutex - logFilePath = "/data/ghproxy/log/ghproxy.log" -) - -// 初始化 -func Init(logFilePath_input string, maxLogsize int) error { - logFileMutex.Lock() - defer logFileMutex.Unlock() - - var err error - logFilePath = logFilePath_input - logFile, err = os.OpenFile(logFilePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) - if err != nil { - return err - } - logger = log.New(logFile, "", 0) - - go logWorker() - go monitorLogSize(logFilePath, maxLogsize) - return nil -} - -func logWorker() { - for { - select { - case msg := <-logChannel: - timestamp := time.Now().Format("02/Jan/2006:15:04:05 -0700") - logger.Println(timestamp + " - " + msg) - case <-quitChannel: - return - } - } -} - -func Log(customMessage string) { - logChannel <- customMessage -} - -func Logw(format string, args ...interface{}) { - message := fmt.Sprintf(format, args...) - Log(message) -} - -// INFO -func LogInfo(format string, args ...interface{}) { - message := fmt.Sprintf(format, args...) - output := fmt.Sprintf("[INFO] %s", message) - Log(output) -} - -// WARNING -func LogWarning(format string, args ...interface{}) { - message := fmt.Sprintf(format, args...) - output := fmt.Sprintf("[WARNING] %s", message) - Log(output) -} - -// ERROR -func LogError(format string, args ...interface{}) { - message := fmt.Sprintf(format, args...) - Log(message) -} - -func Close() { - logFileMutex.Lock() - defer logFileMutex.Unlock() - - if logFile != nil { - quitChannel <- struct{}{} - if err := logFile.Close(); err != nil { - fmt.Printf("Error closing log file: %v", err) - } - } -} - -func monitorLogSize(logFilePath string, maxLogsize int) { - var maxLogsizeBytes int64 = int64(maxLogsize) * 1024 * 1024 - for { - time.Sleep(120 * time.Minute) // 每120分钟检查一次日志文件大小 - logFileMutex.Lock() - info, err := logFile.Stat() - logFileMutex.Unlock() - - if err == nil && info.Size() > maxLogsizeBytes { - if err := rotateLogFile(logFilePath); err != nil { - logw("Log Rotation Failed: %s", err) - } - } - } -} - -func rotateLogFile(logFilePath string) error { - logFileMutex.Lock() - defer logFileMutex.Unlock() - - if logFile != nil { - if err := logFile.Close(); err != nil { - logw("Error closing log file for rotation: %v", err) - } - } - - logFile, err := os.Open(logFilePath) - if err != nil { - return fmt.Errorf("failed to open log file: %s, error: %w", logFilePath, err) - } - defer logFile.Close() - - newLogFilePath := logFilePath + "-" + time.Now().Format("20060102-150405") + ".tar.gz" - outFile, err := os.Create(newLogFilePath) - if err != nil { - return fmt.Errorf("failed to create gz file: %s, error: %w", newLogFilePath, err) - } - defer outFile.Close() - - gzWriter, err := gzip.NewWriterLevel(outFile, gzip.BestCompression) - if err != nil { - return fmt.Errorf("failed to create gz writer: %w", err) - } - defer gzWriter.Close() - - tarWriter := tar.NewWriter(gzWriter) - defer tarWriter.Close() - - logFileStat, err := logFile.Stat() - if err != nil { - return fmt.Errorf("failed to stat log file: %s, error: %w", logFilePath, err) - } - - logFileHeader := &tar.Header{ - Name: filepath.Base(logFilePath), - Size: logFileStat.Size(), - Mode: 0644, - ModTime: logFileStat.ModTime(), - } - - if err := tarWriter.WriteHeader(logFileHeader); err != nil { - return fmt.Errorf("failed to write log file header: %s, error: %w", logFilePath, err) - } - - if _, err := io.Copy(tarWriter, logFile); err != nil { - return fmt.Errorf("failed to copy log file: %s, error: %w", logFilePath, err) - } - - if err := os.Truncate(logFilePath, 0); err != nil { - return fmt.Errorf("failed to truncate log file: %s, error: %w", logFilePath, err) - } - - logFile, err = os.OpenFile(logFilePath, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666) - if err != nil { - return fmt.Errorf("failed to reopen log file: %s, error: %w", logFilePath, err) - } - logger.SetOutput(logFile) - - return nil -} diff --git a/main.go b/main.go index 3297f91..85fa202 100644 --- a/main.go +++ b/main.go @@ -10,10 +10,11 @@ import ( "ghproxy/api" "ghproxy/auth" "ghproxy/config" - "ghproxy/logger" "ghproxy/proxy" "ghproxy/rate" + "github.com/WJQSERVER-STUDIO/go-utils/logger" + "github.com/gin-gonic/gin" ) diff --git a/proxy/proxy.go b/proxy/proxy.go index c3607c8..adbb8cc 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -10,9 +10,9 @@ import ( "ghproxy/auth" "ghproxy/config" - "ghproxy/logger" "ghproxy/rate" + "github.com/WJQSERVER-STUDIO/go-utils/logger" "github.com/gin-gonic/gin" "github.com/imroc/req/v3" ) diff --git a/rate/rate.go b/rate/rate.go index 1b06857..85d111e 100644 --- a/rate/rate.go +++ b/rate/rate.go @@ -1,9 +1,9 @@ package rate import ( - "ghproxy/logger" "time" + "github.com/WJQSERVER-STUDIO/go-utils/logger" "golang.org/x/time/rate" )