Sync and async sinks, redaction, and a queryable HTTP service keep concurrent logs tied to a trace id. Co-authored-by: Cursor <cursoragent@cursor.com>
37 lines
723 B
Go
37 lines
723 B
Go
package sink
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"logging-system/logsys"
|
|
)
|
|
|
|
// Memory 把日志留在内存里,供测试和进程内订阅前的缓冲。
|
|
type Memory struct {
|
|
mu sync.Mutex
|
|
Entries []logsys.Entry
|
|
}
|
|
|
|
// Write 追加一条日志。
|
|
func (m *Memory) Write(e logsys.Entry) error {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
m.Entries = append(m.Entries, e)
|
|
return nil
|
|
}
|
|
|
|
// Sync 无缓冲可刷。
|
|
func (m *Memory) Sync() error { return nil }
|
|
|
|
// Close 不释放已记录的日志。
|
|
func (m *Memory) Close() error { return nil }
|
|
|
|
// Snapshot 返回当前副本。
|
|
func (m *Memory) Snapshot() []logsys.Entry {
|
|
m.mu.Lock()
|
|
defer m.mu.Unlock()
|
|
out := make([]logsys.Entry, len(m.Entries))
|
|
copy(out, m.Entries)
|
|
return out
|
|
}
|