Remove allocations while logging an Array of Objects. (#38)
This commit is contained in:
parent
a717e7cbed
commit
9ee98f91c4
1
array.go
1
array.go
|
@ -48,6 +48,7 @@ func (a *Array) Object(obj LogObjectMarshaler) *Array {
|
||||||
obj.MarshalZerologObject(e)
|
obj.MarshalZerologObject(e)
|
||||||
e.buf = append(e.buf, '}')
|
e.buf = append(e.buf, '}')
|
||||||
a.buf = append(a.buf, e.buf...)
|
a.buf = append(a.buf, e.buf...)
|
||||||
|
eventPool.Put(e)
|
||||||
return a
|
return a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,22 @@ func (o obj) MarshalZerologObject(e *Event) {
|
||||||
Int("priv", o.priv)
|
Int("priv", o.priv)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkLogArrayObject(b *testing.B) {
|
||||||
|
obj1 := obj{"a", "b", 2}
|
||||||
|
obj2 := obj{"c", "d", 3}
|
||||||
|
obj3 := obj{"e", "f", 4}
|
||||||
|
logger := New(ioutil.Discard)
|
||||||
|
b.ResetTimer()
|
||||||
|
b.ReportAllocs()
|
||||||
|
for i := 0; i < b.N; i++ {
|
||||||
|
arr := Arr()
|
||||||
|
arr.Object(&obj1)
|
||||||
|
arr.Object(&obj2)
|
||||||
|
arr.Object(&obj3)
|
||||||
|
logger.Info().Array("objects", arr).Msg("test")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkLogFieldType(b *testing.B) {
|
func BenchmarkLogFieldType(b *testing.B) {
|
||||||
bools := []bool{true, false, true, false, true, false, true, false, true, false}
|
bools := []bool{true, false, true, false, true, false, true, false, true, false}
|
||||||
ints := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
ints := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
|
||||||
|
|
5
event.go
5
event.go
|
@ -2,7 +2,6 @@ package zerolog
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -61,7 +60,9 @@ func (e *Event) write() (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
e.buf = append(e.buf, '}', '\n')
|
e.buf = append(e.buf, '}', '\n')
|
||||||
|
if e.w != nil {
|
||||||
_, err = e.w.WriteLevel(e.level, e.buf)
|
_, err = e.w.WriteLevel(e.level, e.buf)
|
||||||
|
}
|
||||||
eventPool.Put(e)
|
eventPool.Put(e)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -142,7 +143,7 @@ func (e *Event) Dict(key string, dict *Event) *Event {
|
||||||
// Call usual field methods like Str, Int etc to add fields to this
|
// Call usual field methods like Str, Int etc to add fields to this
|
||||||
// event and give it as argument the *Event.Dict method.
|
// event and give it as argument the *Event.Dict method.
|
||||||
func Dict() *Event {
|
func Dict() *Event {
|
||||||
return newEvent(levelWriterAdapter{ioutil.Discard}, 0, true)
|
return newEvent(nil, 0, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Array adds the field key with an array to the event context.
|
// Array adds the field key with an array to the event context.
|
||||||
|
|
Loading…
Reference in New Issue