mirror of
https://github.com/hackdiaz-dev/free-turn-proxy.git
synced 2026-10-12 09:41:53 +02:00
66 lines
1.6 KiB
Go
66 lines
1.6 KiB
Go
package mobile
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"strings"
|
|
"sync"
|
|
"time"
|
|
)
|
|
|
|
const logBufMax = 500
|
|
|
|
type logBuffer struct {
|
|
mu sync.Mutex
|
|
lines []string
|
|
}
|
|
|
|
func (b *logBuffer) append(line string) {
|
|
b.mu.Lock()
|
|
defer b.mu.Unlock()
|
|
b.lines = append(b.lines, line)
|
|
if len(b.lines) > logBufMax {
|
|
b.lines = b.lines[len(b.lines)-logBufMax:]
|
|
}
|
|
}
|
|
|
|
func (b *logBuffer) get() string {
|
|
b.mu.Lock()
|
|
defer b.mu.Unlock()
|
|
return strings.Join(b.lines, "\n")
|
|
}
|
|
|
|
func (b *logBuffer) clear() {
|
|
b.mu.Lock()
|
|
defer b.mu.Unlock()
|
|
b.lines = b.lines[:0]
|
|
}
|
|
|
|
var sharedLogBuf = &logBuffer{}
|
|
|
|
// GetLogs возвращает последние логи фреймворка (до 500 строк).
|
|
func GetLogs() string { return sharedLogBuf.get() }
|
|
|
|
// ClearLogs очищает буфер логов.
|
|
func ClearLogs() { sharedLogBuf.clear() }
|
|
|
|
// bufLogger реализует logx.Logger, пишет в stderr и в sharedLogBuf.
|
|
type bufLogger struct{ debug bool }
|
|
|
|
func (*bufLogger) write(level, format string, v ...any) {
|
|
msg := fmt.Sprintf(format, v...)
|
|
line := time.Now().Format("15:04:05") + " [" + level + "] " + msg
|
|
log.Print("[" + level + "] " + msg)
|
|
sharedLogBuf.append(line)
|
|
}
|
|
|
|
func (l *bufLogger) Debugf(format string, v ...any) {
|
|
if l.debug {
|
|
l.write("DBG", format, v...)
|
|
}
|
|
}
|
|
func (l *bufLogger) Infof(format string, v ...any) { l.write("INF", format, v...) }
|
|
func (l *bufLogger) Warnf(format string, v ...any) { l.write("WRN", format, v...) }
|
|
func (l *bufLogger) Errorf(format string, v ...any) { l.write("ERR", format, v...) }
|
|
func (l *bufLogger) DebugEnabled() bool { return l.debug }
|