From 378c7013b0bb766df7e71467eff98a46625fb6f6 Mon Sep 17 00:00:00 2001
From: Semyon Krestyaninov <ensiouel@gmail.com>
Date: Wed, 14 Feb 2024 09:45:59 +0300
Subject: [PATCH] Revert "remove field file"

This reverts commit 39fa53b8a9a139bb44b2d1f1bfd59a007f89f6cb.
---
 pkg/log/zap/field.go | 79 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 79 insertions(+)
 create mode 100644 pkg/log/zap/field.go

diff --git a/pkg/log/zap/field.go b/pkg/log/zap/field.go
new file mode 100644
index 00000000..e0de88be
--- /dev/null
+++ b/pkg/log/zap/field.go
@@ -0,0 +1,79 @@
+package zap
+
+import (
+	"context"
+	"fmt"
+
+	"git.perx.ru/perxis/perxis-go/id"
+	"git.perx.ru/perxis/perxis-go/pkg/auth"
+	"go.uber.org/zap"
+	"go.uber.org/zap/zapcore"
+)
+
+const (
+	unknownObject = "unknown"
+	unknownCaller = "unknown"
+)
+
+func Category(category string) zapcore.Field {
+	return zap.String("category", category)
+}
+
+func Component(component string) zapcore.Field {
+	return zap.String("component", component)
+}
+
+func Event(event string) zapcore.Field {
+	return zap.String("event", event)
+}
+
+// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате ObjectID.
+// Поддерживаемые типы: string, fmt.Stringer.
+// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID.
+func Object(v any) zapcore.Field {
+	var object = unknownObject
+	switch value := v.(type) {
+	case string:
+		object = value
+	case fmt.Stringer:
+		object = value.String()
+	default:
+		oid, err := id.FromObject(v)
+		if err == nil {
+			object = oid.String()
+		}
+	}
+	return zap.String("object", object)
+}
+
+// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате ObjectID.
+// Поддерживаемые типы: string, fmt.Stringer.
+// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID.
+func Caller(v any) zapcore.Field {
+	var caller = unknownCaller
+	switch value := v.(type) {
+	case string:
+		caller = value
+	case fmt.Stringer:
+		caller = value.String()
+	default:
+		oid, err := id.FromObject(v)
+		if err == nil {
+			caller = oid.String()
+		}
+	}
+	return zap.String("caller", caller)
+}
+
+// CallerFromContext извлекает auth.Principal из контекста и устанавливает его в качестве "вызывающего" в формате ObjectID.
+func CallerFromContext(ctx context.Context) zapcore.Field {
+	return Caller(auth.GetPrincipal(ctx))
+}
+
+func Attr(attr any) zapcore.Field {
+	return zap.Any("attr", attr)
+}
+
+func Tags(tags ...string) zapcore.Field {
+	return zap.Strings("tags", tags)
+}
-- 
GitLab