优化日志

This commit is contained in:
yml2213
2026-06-25 17:41:50 +08:00
parent 8790c4ca33
commit e6116fd8f0
+30 -6
View File
@@ -100,7 +100,29 @@ func (w *AsyncLogWriter) Close() error {
return nil
}
// InitLogging 初始化日志输出:终端、日志文件、内存缓冲三处同时写入。
// logFileWriter 同时写入文件、内存和终端。
// 终端写入失败时静默忽略(Windows GUI 应用无控制台)。
type logFileWriter struct {
file *os.File
store *MemoryLogStore
}
func (w *logFileWriter) Write(p []byte) (int, error) {
// 写入文件
if _, err := w.file.Write(p); err != nil {
return 0, err
}
// 写入内存
if _, err := w.store.Write(p); err != nil {
return 0, err
}
// 尝试写入终端(失败时忽略,Windows GUI 应用无控制台)
_, _ = os.Stdout.Write(p)
return len(p), nil
}
// InitLogging 初始化日志输出:日志文件和内存缓冲同时写入。
// 终端输出通过 logFileWriter 同步写入(Windows GUI 应用无控制台时自动跳过)。
func InitLogging(store *MemoryLogStore, logDir string) func() {
if logDir == "" {
logDir = constants.DefaultLogDir
@@ -110,23 +132,25 @@ func InitLogging(store *MemoryLogStore, logDir string) func() {
logDir = resolveAbsolutePath(logDir)
if err := os.MkdirAll(logDir, 0755); err != nil {
async := NewAsyncLogWriter(io.MultiWriter(os.Stdout, store), 2048)
async := NewAsyncLogWriter(store, 2048)
log.SetOutput(async)
log.Printf("日志目录创建失败,仅写入终端和内存: %v", err)
log.Printf("日志目录创建失败,仅写入内存: %v", err)
return func() { _ = async.Close() }
}
filePath := filepath.Join(logDir, "douyu_"+time.Now().In(constants.CST).Format("20060102_150405")+".log")
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
async := NewAsyncLogWriter(io.MultiWriter(os.Stdout, store), 2048)
async := NewAsyncLogWriter(store, 2048)
log.SetOutput(async)
log.Printf("日志文件创建失败,仅写入终端和内存: %v", err)
log.Printf("日志文件创建失败,仅写入内存: %v", err)
return func() { _ = async.Close() }
}
store.SetFilePath(filePath)
async := NewAsyncLogWriter(io.MultiWriter(os.Stdout, file, store), 2048)
// 使用 logFileWriter 同时写入文件、内存和终端(终端失败时静默忽略)
multi := &logFileWriter{file: file, store: store}
async := NewAsyncLogWriter(multi, 2048)
log.SetOutput(async)
log.Printf("日志文件已启用: %s", filePath)
return func() {