diff --git a/pkg/log/zap/field.go b/pkg/log/zap/field.go
index c6db51017c06cba4e6fd8053d7ece20ba2247451..e7041a9fa2328bc64728a502db4c20639142b709 100644
--- a/pkg/log/zap/field.go
+++ b/pkg/log/zap/field.go
@@ -1,8 +1,10 @@
 package zap
 
 import (
+	"context"
 	"fmt"
 
+	"git.perx.ru/perxis/perxis-go/pkg/auth"
 	"go.uber.org/zap"
 	"go.uber.org/zap/zapcore"
 )
@@ -24,38 +26,49 @@ func Event(event string) zapcore.Field {
 	return zap.String("event", event)
 }
 
-// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате GlobalID.
-// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве идентификатора объекта
-// будет установлен "unknown".
+// Object возвращает поле и устанавливает передаваемый аргумент в качестве идентификатора объекта в формате ObjectID.
+// Поддерживаемые типы: string, fmt.Stringer.
+// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID.
 func Object(v any) zapcore.Field {
-	var object string
+	var object = unknownObject
 	switch value := v.(type) {
 	case string:
 		object = value
 	case fmt.Stringer:
 		object = value.String()
 	default:
-		object = unknownObject
+		oid, err := id.FromObject(v)
+		if err == nil {
+			object = oid.String()
+		}
 	}
 	return zap.String("object", object)
 }
 
-// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате GlobalID.
-// Поддерживает один из типов: string, fmt.Stringer. Если передан аргумент другого типа, в качестве вызывающего
-// будет установлен "unknown".
+// Caller возвращает поле и устанавливает передаваемый аргумент в качестве "вызывающего" в формате ObjectID.
+// Поддерживаемые типы: string, fmt.Stringer.
+// Если передан аргумент другого типа, будет произведена попытка привести переданное значение к ObjectID.
 func Caller(v any) zapcore.Field {
-	var caller string
+	var caller = unknownCaller
 	switch value := v.(type) {
 	case string:
 		caller = value
 	case fmt.Stringer:
 		caller = value.String()
 	default:
-		caller = unknownCaller
+		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)
 }