Skip to content

Commit

Permalink
rework logger to work without sync.Map.Clear() from go 1.23
Browse files Browse the repository at this point in the history
Signed-off-by: Eliott Bouhana <[email protected]>
  • Loading branch information
eliottness committed Jan 31, 2025
1 parent cfe990a commit 091c522
Showing 1 changed file with 15 additions and 30 deletions.
45 changes: 15 additions & 30 deletions internal/newtelemetry/logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,18 +64,10 @@ type loggerValue struct {
}

type logger struct {
store atomic.Pointer[internal.TypedSyncMap[loggerKey, *loggerValue]]
store internal.TypedSyncMap[loggerKey, *loggerValue]
}

func (logger *logger) Add(level LogLevel, text string, opts ...LogOption) {
store := logger.store.Load()
if store == nil {
store = new(internal.TypedSyncMap[loggerKey, *loggerValue])
for logger.store.CompareAndSwap(nil, store) {
continue
}
}

key := loggerKey{
message: text,
level: level,
Expand All @@ -85,32 +77,22 @@ func (logger *logger) Add(level LogLevel, text string, opts ...LogOption) {
opt(&key, nil)
}

val, ok := store.Load(key)
if ok {
val.count.Add(1)
return
}

newVal := &loggerValue{
time: time.Now().Unix(),
}

for _, opt := range opts {
opt(&key, newVal)
value, loaded := logger.store.LoadOrStore(key, &loggerValue{})
if !loaded {
// If we were the first to store the value, we need to set the time and apply the options
value.time = time.Now().Unix()
for _, opt := range opts {
opt(nil, value)
}
}

newVal.count.Store(1)
store.Store(key, newVal)
value.count.Add(1)
}

func (logger *logger) Payload() transport.Payload {
store := logger.store.Swap(nil)
if store == nil {
return nil
}

var logs []transport.LogMessage
store.Range(func(key loggerKey, value *loggerValue) bool {
logger.store.Range(func(key loggerKey, value *loggerValue) bool {
logger.store.Delete(key)
logs = append(logs, transport.LogMessage{
Message: key.message,
Level: key.level,
Expand All @@ -122,6 +104,9 @@ func (logger *logger) Payload() transport.Payload {
return true
})

store.Clear()
if len(logs) == 0 {
return nil
}

return transport.Logs{Logs: logs}
}

0 comments on commit 091c522

Please sign in to comment.