优化日志
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user