81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"sync"
 | 
						|
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
)
 | 
						|
 | 
						|
// LogBuffer garde les derniers logs en mémoire
 | 
						|
type LogBuffer struct {
 | 
						|
	entries []LogEntry
 | 
						|
	maxSize int
 | 
						|
	mutex   sync.RWMutex
 | 
						|
}
 | 
						|
 | 
						|
type LogEntry struct {
 | 
						|
	Timestamp string `json:"timestamp"`
 | 
						|
	Level     string `json:"level"`
 | 
						|
	Message   string `json:"message"`
 | 
						|
}
 | 
						|
 | 
						|
var logBuffer *LogBuffer
 | 
						|
 | 
						|
func NewLogBuffer(maxSize int) *LogBuffer {
 | 
						|
	return &LogBuffer{
 | 
						|
		entries: make([]LogEntry, 0, maxSize),
 | 
						|
		maxSize: maxSize,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (lb *LogBuffer) Add(entry LogEntry) {
 | 
						|
	lb.mutex.Lock()
 | 
						|
	defer lb.mutex.Unlock()
 | 
						|
 | 
						|
	lb.entries = append(lb.entries, entry)
 | 
						|
 | 
						|
	// Garder seulement les N derniers
 | 
						|
	if len(lb.entries) > lb.maxSize {
 | 
						|
		lb.entries = lb.entries[1:]
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func (lb *LogBuffer) GetAll() []LogEntry {
 | 
						|
	lb.mutex.RLock()
 | 
						|
	defer lb.mutex.RUnlock()
 | 
						|
 | 
						|
	// Retourner une copie
 | 
						|
	result := make([]LogEntry, len(lb.entries))
 | 
						|
	copy(result, lb.entries)
 | 
						|
	return result
 | 
						|
}
 | 
						|
 | 
						|
// Hook pour capturer les logs
 | 
						|
type LogHook struct {
 | 
						|
	buffer *LogBuffer
 | 
						|
}
 | 
						|
 | 
						|
func (h *LogHook) Levels() []log.Level {
 | 
						|
	return log.AllLevels
 | 
						|
}
 | 
						|
 | 
						|
func (h *LogHook) Fire(entry *log.Entry) error {
 | 
						|
	logEntry := LogEntry{
 | 
						|
		Timestamp: entry.Time.Format("02-01-2006 15:04:05"),
 | 
						|
		Level:     entry.Level.String(),
 | 
						|
		Message:   entry.Message,
 | 
						|
	}
 | 
						|
 | 
						|
	h.buffer.Add(logEntry)
 | 
						|
 | 
						|
	// Broadcaster vers les clients WebSocket connectés
 | 
						|
	if httpServerInstance != nil {
 | 
						|
		httpServerInstance.broadcast <- WSMessage{
 | 
						|
			Type: "appLog",
 | 
						|
			Data: logEntry,
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	return nil
 | 
						|
}
 |