ghproxy/logger/logger.go
2024-09-27 14:02:21 +08:00

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()) // 记录关闭日志时的错误
}
}
}