mirror of
https://github.com/WJQSERVER-STUDIO/ghproxy.git
synced 2026-02-03 16:21:11 +08:00
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
// logger/logger.go
|
|
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
var (
|
|
logFile *os.File
|
|
logger *log.Logger
|
|
logChannel = make(chan string, 100) // 创建一个缓冲通道
|
|
quitChannel = make(chan struct{}) // 用于通知退出
|
|
)
|
|
|
|
// Init 初始化日志记录器,接受日志文件路径作为参数
|
|
func Init(logFilePath string) error {
|
|
var err error
|
|
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() // 启动 goroutine 处理日志
|
|
return nil
|
|
}
|
|
|
|
// logWorker 处理日志记录
|
|
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 // 退出 goroutine
|
|
}
|
|
}
|
|
}
|
|
|
|
// Log 直接记录日志的函数
|
|
func Log(customMessage string) {
|
|
logChannel <- customMessage // 将日志消息发送到通道
|
|
}
|
|
|
|
// Logw 用于格式化日志记录
|
|
func Logw(format string, args ...interface{}) {
|
|
message := fmt.Sprintf(format, args...) // 格式化消息
|
|
Log(message) // 记录日志
|
|
}
|
|
|
|
// Close 关闭日志文件
|
|
func Close() {
|
|
if logFile != nil {
|
|
quitChannel <- struct{}{} // 通知日志 goroutine 退出
|
|
if err := logFile.Close(); err != nil {
|
|
Log("Error closing log file: " + err.Error()) // 记录关闭日志时的错误
|
|
}
|
|
}
|
|
}
|