1 // Copyright 2022 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 //go:build go1.21 6 7 package slog 8 9 import ( 10 "log/slog" 11 "time" 12 ) 13 14 // A Value can represent any Go value, but unlike type any, 15 // it can represent most small values without an allocation. 16 // The zero Value corresponds to nil. 17 type Value = slog.Value 18 19 // Kind is the kind of a Value. 20 type Kind = slog.Kind 21 22 // The following list is sorted alphabetically, but it's also important that 23 // KindAny is 0 so that a zero Value represents nil. 24 const ( 25 KindAny = slog.KindAny 26 KindBool = slog.KindBool 27 KindDuration = slog.KindDuration 28 KindFloat64 = slog.KindFloat64 29 KindInt64 = slog.KindInt64 30 KindString = slog.KindString 31 KindTime = slog.KindTime 32 KindUint64 = slog.KindUint64 33 KindGroup = slog.KindGroup 34 KindLogValuer = slog.KindLogValuer 35 ) 36 37 //////////////// Constructors 38 39 // StringValue returns a new Value for a string. 40 func StringValue(value string) Value { 41 return slog.StringValue(value) 42 } 43 44 // IntValue returns a Value for an int. 45 func IntValue(v int) Value { 46 return slog.IntValue(v) 47 } 48 49 // Int64Value returns a Value for an int64. 50 func Int64Value(v int64) Value { 51 return slog.Int64Value(v) 52 } 53 54 // Uint64Value returns a Value for a uint64. 55 func Uint64Value(v uint64) Value { 56 return slog.Uint64Value(v) 57 } 58 59 // Float64Value returns a Value for a floating-point number. 60 func Float64Value(v float64) Value { 61 return slog.Float64Value(v) 62 } 63 64 // BoolValue returns a Value for a bool. 65 func BoolValue(v bool) Value { 66 return slog.BoolValue(v) 67 } 68 69 // TimeValue returns a Value for a time.Time. 70 // It discards the monotonic portion. 71 func TimeValue(v time.Time) Value { 72 return slog.TimeValue(v) 73 } 74 75 // DurationValue returns a Value for a time.Duration. 76 func DurationValue(v time.Duration) Value { 77 return slog.DurationValue(v) 78 } 79 80 // GroupValue returns a new Value for a list of Attrs. 81 // The caller must not subsequently mutate the argument slice. 82 func GroupValue(as ...Attr) Value { 83 return slog.GroupValue(as...) 84 } 85 86 // AnyValue returns a Value for the supplied value. 87 // 88 // If the supplied value is of type Value, it is returned 89 // unmodified. 90 // 91 // Given a value of one of Go's predeclared string, bool, or 92 // (non-complex) numeric types, AnyValue returns a Value of kind 93 // String, Bool, Uint64, Int64, or Float64. The width of the 94 // original numeric type is not preserved. 95 // 96 // Given a time.Time or time.Duration value, AnyValue returns a Value of kind 97 // KindTime or KindDuration. The monotonic time is not preserved. 98 // 99 // For nil, or values of all other types, including named types whose 100 // underlying type is numeric, AnyValue returns a value of kind KindAny. 101 func AnyValue(v any) Value { 102 return slog.AnyValue(v) 103 } 104 105 // A LogValuer is any Go value that can convert itself into a Value for logging. 106 // 107 // This mechanism may be used to defer expensive operations until they are 108 // needed, or to expand a single value into a sequence of components. 109 type LogValuer = slog.LogValuer 110