Harden UDP audio transport and logging

This commit is contained in:
Brandon McGinty (chatgpt)
2026-08-09 13:14:48 -04:00
committed by Brandon McGinty
parent 64d0ef6f0f
commit 7d7d59649b
11 changed files with 348 additions and 207 deletions
+43 -29
View File
@@ -7,6 +7,7 @@ import (
"io"
"os"
"sync"
"sync/atomic"
"time"
)
@@ -40,10 +41,16 @@ type Logger interface {
Log(level Level, format string, args ...interface{})
}
var (
mu sync.Mutex
logger Logger = &nopLogger{}
)
type loggerState struct {
logger Logger
level Level
}
var logger atomic.Pointer[loggerState]
func init() {
logger.Store(&loggerState{logger: &nopLogger{}, level: LevelError + 1})
}
type nopLogger struct{}
@@ -51,21 +58,28 @@ func (n *nopLogger) Log(level Level, format string, args ...interface{}) {}
// SetLogger sets the destination for log messages. Pass nil to disable.
func SetLogger(l Logger) {
mu.Lock()
defer mu.Unlock()
state := &loggerState{logger: l, level: LevelDebug}
if l == nil {
logger = &nopLogger{}
} else {
logger = l
state.logger = &nopLogger{}
state.level = LevelError + 1
} else if writer, ok := l.(*WriterLogger); ok {
state.level = writer.level
}
logger.Store(state)
}
// Enabled reports whether messages at level will be emitted. Callers should
// use it to avoid computing expensive log arguments when logging is disabled.
func Enabled(level Level) bool {
return level >= logger.Load().level
}
// WriterLogger is a simple Logger that writes to an io.Writer.
type WriterLogger struct {
mu sync.Mutex
w io.Writer
level Level
buf []byte
mu sync.Mutex
w io.Writer
level Level
buf []byte
}
// NewWriterLogger creates a logger that writes to w, filtering below level.
@@ -88,29 +102,29 @@ func (wl *WriterLogger) Log(level Level, format string, args ...interface{}) {
}
func Debug(format string, args ...interface{}) {
mu.Lock()
l := logger
mu.Unlock()
l.Log(LevelDebug, format, args...)
state := logger.Load()
if LevelDebug >= state.level {
state.logger.Log(LevelDebug, format, args...)
}
}
func Info(format string, args ...interface{}) {
mu.Lock()
l := logger
mu.Unlock()
l.Log(LevelInfo, format, args...)
state := logger.Load()
if LevelInfo >= state.level {
state.logger.Log(LevelInfo, format, args...)
}
}
func Warn(format string, args ...interface{}) {
mu.Lock()
l := logger
mu.Unlock()
l.Log(LevelWarn, format, args...)
state := logger.Load()
if LevelWarn >= state.level {
state.logger.Log(LevelWarn, format, args...)
}
}
func Error(format string, args ...interface{}) {
mu.Lock()
l := logger
mu.Unlock()
l.Log(LevelError, format, args...)
state := logger.Load()
if LevelError >= state.level {
state.logger.Log(LevelError, format, args...)
}
}