溫馨提示×

Golang日志中如何實現多線程安全寫入

小樊
38
2025-07-28 13:13:27
欄目: 編程語言

在Golang中,可以使用sync.Mutexsync.RWMutex來實現多線程安全的日志寫入。這里是一個簡單的示例,展示了如何使用sync.Mutex實現多線程安全的日志寫入:

package main

import (
	"fmt"
	"log"
	"os"
	"sync"
	"time"
)

type Logger struct {
	mu    sync.Mutex
	logger *log.Logger
}

func NewLogger() *Logger {
	return &Logger{
		logger: log.New(os.Stdout, "", log.LstdFlags),
	}
}

func (l *Logger) Log(message string) {
	l.mu.Lock()
	defer l.mu.Unlock()
	l.logger.Println(message)
}

func main() {
	logger := NewLogger()

	var wg sync.WaitGroup
	for i := 0; i < 10; i++ {
		wg.Add(1)
		go func(i int) {
			defer wg.Done()
			logger.Log(fmt.Sprintf("Log message %d from goroutine %d", i, i))
		}(i)
	}

	wg.Wait()
}

在這個示例中,我們創建了一個Logger結構體,它包含一個sync.Mutex和一個log.Logger。Log方法使用互斥鎖來確保在同一時間只有一個goroutine可以訪問log.Logger實例。這樣,我們就可以在多個goroutine中安全地寫入日志。

注意:在實際應用中,你可能需要根據需求調整日志級別、格式等設置。此外,還可以考慮使用第三方日志庫,如logruszap,它們通常已經實現了多線程安全的日志寫入。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女