angle_dtu/logger.go
2025-05-14 17:31:15 +08:00

90 lines
2.5 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// logger.go
package main
import (
"fmt"
"io"
"log"
"os"
"path/filepath"
"time"
)
// 日志文件
var (
logFile *os.File
Logger *log.Logger // 导出Logger供其他包使用
TCPDataLogger *log.Logger // 专门用于记录TCP数据的日志
)
// 初始化日志系统
func InitLogger() error {
// 创建logs目录
logsDir := "logs"
if err := os.MkdirAll(logsDir, 0755); err != nil {
return fmt.Errorf("创建日志目录失败: %v", err)
}
// 创建当天的日志文件
today := time.Now().Format("2006-01-02")
logFilePath := filepath.Join(logsDir, fmt.Sprintf("server_%s.log", today))
file, err := os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return fmt.Errorf("打开日志文件失败: %v", err)
}
logFile = file
// 创建一个多输出的logger同时写入文件和控制台
multiWriter := io.MultiWriter(os.Stdout, file)
Logger = log.New(multiWriter, "", log.Ldate|log.Ltime|log.Lshortfile)
// 创建TCP数据日志文件
tcpDataFilePath := filepath.Join(logsDir, fmt.Sprintf("tcp_data_%s.log", today))
tcpDataFile, err := os.OpenFile(tcpDataFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
return fmt.Errorf("打开TCP数据日志文件失败: %v", err)
}
// TCP数据日志同时写入文件和控制台
tcpDataMultiWriter := io.MultiWriter(os.Stdout, tcpDataFile)
TCPDataLogger = log.New(tcpDataMultiWriter, "TCP_DATA: ", log.Ldate|log.Ltime)
// 替换标准日志
log.SetOutput(multiWriter)
log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
Logger.Println("日志系统初始化完成")
return nil
}
// 关闭日志文件
func CloseLogger() {
if logFile != nil {
logFile.Close()
}
}
// 日志轮转,每天创建新的日志文件
func StartLogRotation() {
go func() {
for {
// 等待到明天0点
now := time.Now()
next := now.Add(24 * time.Hour)
next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location())
duration := next.Sub(now)
time.Sleep(duration)
// 重新初始化日志
Logger.Println("开始日志轮转...")
CloseLogger()
if err := InitLogger(); err != nil {
log.Printf("日志轮转失败: %v", err)
}
}
}()
}