/
t3
/
cli
Обзор
Документация
Войти
/
t3
/
cli
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
internal/controller/logwriter.go
65 строк
1 KB
Ivan Shibkikh
fix controller logger
07 июл 2026, 10:55
07 июл 2026, 10:55
c98f2ff
Код
Авторство
О чём код?
package controller import ( "fmt" "io" "sync" "time" "gitverse.ru/t3/cli/internal/events" "gitverse.ru/t3/cli/pkg/pb" ) // switchableWriter implements io.Writer that can be toggled on/off. // When disabled, writes are silently discarded (dev/null behavior). // Thread-safe. type switchableWriter struct { wrapped io.Writer mu sync.RWMutex enabled bool } func newSwitchableWriter(wrapped io.Writer) *switchableWriter { return &switchableWriter{ wrapped: wrapped, enabled: true, } } // Write implements io.Writer. When enabled, delegates to the wrapped writer. // When disabled, silently discards all data. func (w *switchableWriter) Write(p []byte) (n int, err error) { w.mu.RLock() enabled := w.enabled w.mu.RUnlock() if !enabled { return len(p), nil } return w.wrapped.Write(p) } // DisableStdout disables output to the wrapped writer (stdout). // All subsequent Write calls will silently discard data. func (w *switchableWriter) DisableStdout() { w.mu.Lock() w.enabled = false w.mu.Unlock() } // FormatLogEvent renders a LogEvent into the unified plain-text log format: // // [SEVERITY] TIMESTAMP : MESSAGE // key: value func FormatLogEvent(event *pb.LogEvent) string { ts := "" if event.TimestampMs > 0 { ts = " " + time.UnixMilli(event.TimestampMs).Format(time.RFC3339) } line := fmt.Sprintf("[%s]%s : %s\n", event.Severity, ts, event.Message) for _, arg := range event.Args { line += fmt.Sprintf(" %s: %s\n", arg.Key, events.LogArgValueString(arg)) } return line }