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:
+14
-8
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user