logger_ctx.go 544 B

12345678910111213141516171819202122232425262728
  1. package logger
  2. import "context"
  3. func With(ctx context.Context, key string, value any) context.Context {
  4. ctxAttrMu.Lock()
  5. defer ctxAttrMu.Unlock()
  6. if ctx.Value(CtxAttrKey{}) == nil {
  7. ctx = context.WithValue(ctx, CtxAttrKey{}, make([]any, 0))
  8. }
  9. kv, ok := ctx.Value(CtxAttrKey{}).([]any)
  10. if !ok {
  11. return ctx
  12. }
  13. return context.WithValue(ctx, CtxAttrKey{}, append(kv, key, value))
  14. }
  15. func AttrFromCtx(ctx context.Context) []any {
  16. ctxAttrMu.RLock()
  17. defer ctxAttrMu.RUnlock()
  18. kv, _ := ctx.Value(CtxAttrKey{}).([]any)
  19. return kv
  20. }