feat(logging): add real-time log streaming via websocket

- Implement WebSocket endpoint for streaming logs to clients
- Add log broadcaster to manage client connections and history
- Update documentation with new WebSocket API details
- Include gorilla/websocket dependency for WebSocket support
This commit is contained in:
2026-03-17 19:12:15 +08:00
parent 20ec25328d
commit 33e5119b0a
9 changed files with 444 additions and 150 deletions
+14 -8
View File
@@ -31,7 +31,6 @@ func getSystemTime() string {
return now.Format("2006-01-02 15:04:05.000")
}
// SetDebugMode sets the debug mode for the logger
func SetDebugMode(debug bool) {
loggerMutex.Lock()
defer loggerMutex.Unlock()
@@ -43,31 +42,38 @@ func PostLog(message string, level int) {
idx := level
if idx < 0 || idx >= len(levelNames) {
idx = INFO // default to INFO
idx = INFO
}
// Lock to make reading debug flag and all output atomic across threads
loggerMutex.Lock()
// Skip DEBUG when debug is off
if idx == DEBUG && !isDebug {
loggerMutex.Unlock()
return
}
// Colored output
levelDisplay := colorOut_256(levelNames[idx], levelColors[idx])
// Copy logsDB to avoid holding the lock during DB operation
db := logsDB
loggerMutex.Unlock()
fmt.Printf("[%s - %s] %s\n", timeNow, levelDisplay, message)
insertLogToDB(db, level, message, timeNow)
if broadcaster != nil {
broadcaster.AddToHistory(LogMessage{
Level: level,
Content: message,
Timestamp: timeNow,
})
broadcaster.Broadcast(LogMessage{
Level: level,
Content: message,
Timestamp: timeNow,
})
}
}
// Helper functions for different log levels
func Debug(message string) {
PostLog(message, DEBUG)
}