Benchmark comparison rec.go with major logger libraries.
Benchmark results are compared using benchstat
.
log sample:
{"timestamp":"2021-12-12T18:37:38.650683+09:00","severity":"INFO","caller":"/Users/newtstat/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:40","message":"benchmark"}
result:
logger | time/op | delta |
---|---|---|
rec.go | 2.03µs ± 2% | - |
zap | 7.71µs ± 7% | +279.07% |
zerolog | 2.13µs ±10% | ~ |
logger | alloc/op bytes | delta |
---|---|---|
rec.go | 208B ± 0% | - |
zap | 328B ± 0% | +57.69% |
zerolog | 328B ± 0% | +57.69% |
logger | allocs/op times | delta |
---|---|---|
rec.go | 1.00 ± 0% | - |
zap | 3.00 ± 0% | +200.00% |
zerolog | 3.00 ± 0% | +200.00% |
log sample:
{"timestamp":"2021-12-12T18:37:55.616187+09:00","severity":"INFO","caller":"/Users/newtstat/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:62","message":"benchmark","key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6","key7":"value7","key8":"value8","key9":"value9"}
result:
logger | time/op | delta |
---|---|---|
rec.go | 3.50µs ±10% | - |
zap | 8.77µs ±11% | +150.36% |
zerolog | 2.60µs ± 1% | -25.87% |
logger | alloc/op bytes | delta |
---|---|---|
rec.go | 208B ± 0% | - |
zap | 970B ± 0% | +366.35% |
zerolog | 336B ± 0% | +61.54% |
logger | allocs/op times | delta |
---|---|---|
rec.go | 1.00 ± 0% | - |
zap | 4.00 ± 0% | +300.00% |
zerolog | 4.00 ± 0% | +300.00% |
log sample:
{"timestamp":"2021-12-12T18:38:25.405149+09:00","severity":"INFO","caller":"/Users/newtstat/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:95","message":"benchmark","error":"EOF"}
result:
logger | time/op | delta |
---|---|---|
rec.go | 2.25µs ± 7% | - |
zap | 8.24µs ±10% | +266.51% |
zerolog | 7.76µs ± 6% | +245.24% |
logger | alloc/op bytes | delta |
---|---|---|
rec.go | 208B ± 0% | - |
zap | 392B ± 0% | +88.65% |
zerolog | 336B ± 0% | +61.54% |
logger | allocs/op times | delta |
---|---|---|
rec.go | 1.00 ± 0% | - |
zap | 4.00 ± 0% | +300.00% |
zerolog | 4.00 ± 0% | +300.00% |
log sample:
{"timestamp":"2021-12-12T01:27:24.139634+09:00","severity":"INFO","caller":"/Users/newtstat/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_benchmark_test.go:71","message":"benchmark","err0":"EOF","err1":"EOF","err2":"EOF","err3":"EOF","err4":"EOF","err5":"EOF","err6":"EOF","err7":"EOF","err8":"EOF","err9":"EOF"}
result:
logger | time/op | delta |
---|---|---|
rec.go | 2.90µs ±10% | - |
zap | 9.10µs ± 8% | +213.74% |
zerolog | 7.91µs ± 7% | +172.62% |
logger | alloc/op bytes | delta |
---|---|---|
rec.go | 208B ± 0% | - |
zap | 970B ± 0% | +366.35% |
zerolog | 336B ± 0% | +61.54% |
logger | allocs/op times | delta |
---|---|---|
rec.go | 1.00 ± 0% | - |
zap | 4.00 ± 0% | +300.00% |
zerolog | 4.00 ± 0% | +300.00% |
$ ./benchmark.sh
2021-12-16T03:37:38+09:00 [ INFO] clean up
2021-12-16T03:37:38+09:00 [ INFO] $ rm -f /tmp/rec_benchmark_msgnofld.log /tmp/zap_benchmark_msgnofld.log /tmp/zerolog_benchmark_msgnofld.log /tmp/rec_benchmark_str10fld.log /tmp/zap_benchmark_str10fld.log /tmp/zerolog_benchmark_str10fld.log /tmp/rec_benchmark_err01fld.log /tmp/zap_benchmark_err01fld.log /tmp/zerolog_benchmark_err01fld.log /tmp/rec_benchmark_err10fld.log /tmp/zap_benchmark_err10fld.log /tmp/zerolog_benchmark_err10fld.log
2021-12-16T03:37:39+09:00 [ INFO] $ go test -v -o /tmp/rec.test -bench ^BenchmarkRec$ -benchmem -benchtime=3000ms -count=5 -cpuprofile=/tmp/rec.cpu.prof
goos: darwin
goarch: amd64
pkg: benchmark
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkRec
BenchmarkRec/benchmark.msgnofldRec
BenchmarkRec/benchmark.msgnofldRec-12 1709815 2053 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.msgnofldRec-12 1747734 2061 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.msgnofldRec-12 1691269 2058 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.msgnofldRec-12 1796599 1998 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.msgnofldRec-12 1777950 2002 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.str10fldRec
BenchmarkRec/benchmark.str10fldRec-12 1054396 3235 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.str10fldRec-12 1000000 3367 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.str10fldRec-12 997844 3710 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.str10fldRec-12 921213 3864 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.str10fldRec-12 1105514 3343 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err01fldRec
BenchmarkRec/benchmark.err01fldRec-12 1482550 2416 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err01fldRec-12 1618983 2154 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err01fldRec-12 1641285 2208 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err01fldRec-12 1621483 2234 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err01fldRec-12 1578942 2229 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err10fldRec
BenchmarkRec/benchmark.err10fldRec-12 1255753 2716 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err10fldRec-12 1284099 2716 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err10fldRec-12 1258257 2797 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err10fldRec-12 1000000 3199 ns/op 208 B/op 1 allocs/op
BenchmarkRec/benchmark.err10fldRec-12 1000000 3077 ns/op 208 B/op 1 allocs/op
PASS
ok benchmark 106.377s
2021-12-16T03:39:29+09:00 [ INFO] $ go test -v -o /tmp/rec.test -bench ^BenchmarkZap$ -benchmem -benchtime=3000ms -count=5 -cpuprofile=/tmp/zap.cpu.prof
goos: darwin
goarch: amd64
pkg: benchmark
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkZap
BenchmarkZap/benchmark.msgnofldZap
BenchmarkZap/benchmark.msgnofldZap-12 492597 8266 ns/op 328 B/op 3 allocs/op
BenchmarkZap/benchmark.msgnofldZap-12 454812 7449 ns/op 328 B/op 3 allocs/op
BenchmarkZap/benchmark.msgnofldZap-12 503792 7213 ns/op 328 B/op 3 allocs/op
BenchmarkZap/benchmark.msgnofldZap-12 486175 7502 ns/op 328 B/op 3 allocs/op
BenchmarkZap/benchmark.msgnofldZap-12 373312 8129 ns/op 328 B/op 3 allocs/op
BenchmarkZap/benchmark.str10fldZap
BenchmarkZap/benchmark.str10fldZap-12 456920 8524 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.str10fldZap-12 422215 8288 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.str10fldZap-12 387847 8879 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.str10fldZap-12 416850 8434 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.str10fldZap-12 318793 9736 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.err01fldZap
BenchmarkZap/benchmark.err01fldZap-12 517747 8324 ns/op 393 B/op 4 allocs/op
BenchmarkZap/benchmark.err01fldZap-12 471072 8279 ns/op 392 B/op 4 allocs/op
BenchmarkZap/benchmark.err01fldZap-12 358417 9035 ns/op 393 B/op 4 allocs/op
BenchmarkZap/benchmark.err01fldZap-12 462370 7686 ns/op 392 B/op 4 allocs/op
BenchmarkZap/benchmark.err01fldZap-12 454407 7875 ns/op 392 B/op 4 allocs/op
BenchmarkZap/benchmark.err10fldZap
BenchmarkZap/benchmark.err10fldZap-12 448843 8332 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.err10fldZap-12 385429 9294 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.err10fldZap-12 334862 8966 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.err10fldZap-12 395906 9824 ns/op 970 B/op 4 allocs/op
BenchmarkZap/benchmark.err10fldZap-12 390951 9092 ns/op 970 B/op 4 allocs/op
PASS
ok benchmark 107.066s
2021-12-16T03:41:18+09:00 [ INFO] $ go test -v -o /tmp/rec.test -bench ^BenchmarkZerolog$ -benchmem -benchtime=3000ms -count=5 -cpuprofile=/tmp/zerolog.cpu.prof
goos: darwin
goarch: amd64
pkg: benchmark
cpu: Intel(R) Core(TM) i7-9750H CPU @ 2.60GHz
BenchmarkZerolog
BenchmarkZerolog/benchmark.msgnofldZerolog
BenchmarkZerolog/benchmark.msgnofldZerolog-12 1694060 2173 ns/op 328 B/op 3 allocs/op
BenchmarkZerolog/benchmark.msgnofldZerolog-12 1646575 2295 ns/op 328 B/op 3 allocs/op
BenchmarkZerolog/benchmark.msgnofldZerolog-12 1884441 1928 ns/op 328 B/op 3 allocs/op
BenchmarkZerolog/benchmark.msgnofldZerolog-12 1620259 2317 ns/op 328 B/op 3 allocs/op
BenchmarkZerolog/benchmark.msgnofldZerolog-12 1787832 1958 ns/op 328 B/op 3 allocs/op
BenchmarkZerolog/benchmark.str10fldZerolog
BenchmarkZerolog/benchmark.str10fldZerolog-12 1291003 2610 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.str10fldZerolog-12 1336137 2570 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.str10fldZerolog-12 1346000 2617 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.str10fldZerolog-12 1405378 2608 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.str10fldZerolog-12 1351738 2582 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err01fldZerolog
BenchmarkZerolog/benchmark.err01fldZerolog-12 536658 7924 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err01fldZerolog-12 461550 8248 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err01fldZerolog-12 479190 7474 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err01fldZerolog-12 428580 7623 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err01fldZerolog-12 488318 7539 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err10fldZerolog
BenchmarkZerolog/benchmark.err10fldZerolog-12 415804 7375 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err10fldZerolog-12 446952 8056 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err10fldZerolog-12 379148 8111 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err10fldZerolog-12 466863 7961 ns/op 336 B/op 4 allocs/op
BenchmarkZerolog/benchmark.err10fldZerolog-12 443790 8041 ns/op 336 B/op 4 allocs/op
PASS
ok benchmark 113.033s
2021-12-16T03:43:12+09:00 [ INFO] show tail log
2021-12-16T03:43:12+09:00 [ INFO] $ tail -n 1 /tmp/rec_benchmark_msgnofld.log /tmp/zap_benchmark_msgnofld.log /tmp/zerolog_benchmark_msgnofld.log /tmp/rec_benchmark_str10fld.log /tmp/zap_benchmark_str10fld.log /tmp/zerolog_benchmark_str10fld.log /tmp/rec_benchmark_err01fld.log /tmp/zap_benchmark_err01fld.log /tmp/zerolog_benchmark_err01fld.log /tmp/rec_benchmark_err10fld.log /tmp/zap_benchmark_err10fld.log /tmp/zerolog_benchmark_err10fld.log
==> /tmp/rec_benchmark_msgnofld.log <==
{"timestamp":"2021-12-16T03:38:09.083799+09:00","severity":"INFO","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:40","message":"benchmark"}
==> /tmp/zap_benchmark_msgnofld.log <==
{"severity":"INFO","timestamp":"2021-12-16T03:39:58.573486+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zap_____benchmark_test.go:58","message":"benchmark"}
==> /tmp/zerolog_benchmark_msgnofld.log <==
{"severity":"info","timestamp":"2021-12-16T03:41:48.356838+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zerolog_benchmark_test.go:56","message":"benchmark"}
==> /tmp/rec_benchmark_str10fld.log <==
{"timestamp":"2021-12-16T03:38:32.294801+09:00","severity":"INFO","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:62","message":"benchmark","key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6","key7":"value7","key8":"value8","key9":"value9"}
==> /tmp/zap_benchmark_str10fld.log <==
{"severity":"INFO","timestamp":"2021-12-16T03:40:24.399351+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zap_____benchmark_test.go:100","message":"benchmark","key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6","key7":"value7","key8":"value8","key9":"value9"}
==> /tmp/zerolog_benchmark_str10fld.log <==
{"severity":"info","key0":"value0","key1":"value1","key2":"value2","key3":"value3","key4":"value4","key5":"value5","key6":"value6","key7":"value7","key8":"value8","key9":"value9","timestamp":"2021-12-16T03:42:19.375573+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zerolog_benchmark_test.go:105","message":"benchmark"}
==> /tmp/rec_benchmark_err01fld.log <==
{"timestamp":"2021-12-16T03:39:01.617593+09:00","severity":"INFO","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:95","message":"benchmark","error":"EOF"}
==> /tmp/zap_benchmark_err01fld.log <==
{"severity":"INFO","timestamp":"2021-12-16T03:40:48.101658+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zap_____benchmark_test.go:153","message":"benchmark","error":"EOF"}
==> /tmp/zerolog_benchmark_err01fld.log <==
{"severity":"info","error":"EOF","timestamp":"2021-12-16T03:42:49.346012+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zerolog_benchmark_test.go:144","message":"benchmark"}
==> /tmp/rec_benchmark_err10fld.log <==
{"timestamp":"2021-12-16T03:39:27.010308+09:00","severity":"INFO","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/rec_____benchmark_test.go:119","message":"benchmark","err0":"EOF","err1":"EOF","err2":"EOF","err3":"EOF","err4":"EOF","err5":"EOF","err6":"EOF","err7":"EOF","err8":"EOF","err9":"EOF"}
==> /tmp/zap_benchmark_err10fld.log <==
{"severity":"INFO","timestamp":"2021-12-16T03:41:17.996088+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zap_____benchmark_test.go:197","message":"benchmark","err0":"EOF","err1":"EOF","err2":"EOF","err3":"EOF","err4":"EOF","err5":"EOF","err6":"EOF","err7":"EOF","err8":"EOF","err9":"EOF"}
==> /tmp/zerolog_benchmark_err10fld.log <==
{"severity":"info","err0":"EOF","err1":"EOF","err2":"EOF","err3":"EOF","err4":"EOF","err5":"EOF","err6":"EOF","err7":"EOF","err8":"EOF","err9":"EOF","timestamp":"2021-12-16T03:43:12.426927+09:00","caller":"/Users/kentaro.ogino/go/src/gist.github.com/rec-logger/rec_benchmark_test.go/zerolog_benchmark_test.go:192","message":"benchmark"}
2021-12-16T03:43:12+09:00 [ INFO] benchstat rec.go -> zap
2021-12-16T03:43:13+09:00 [ INFO] $ benchstat /tmp/rec_benchmark_result.log /tmp/zap_benchmark_result.log
name old time/op new time/op delta
msgnofld-12 2.03µs ± 2% 7.71µs ± 7% +279.07% (p=0.008 n=5+5)
str10fld-12 3.50µs ±10% 8.77µs ±11% +150.36% (p=0.008 n=5+5)
err01fld-12 2.25µs ± 7% 8.24µs ±10% +266.51% (p=0.008 n=5+5)
err10fld-12 2.90µs ±10% 9.10µs ± 8% +213.74% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
msgnofld-12 208B ± 0% 328B ± 0% +57.69% (p=0.008 n=5+5)
str10fld-12 208B ± 0% 970B ± 0% +366.35% (p=0.008 n=5+5)
err01fld-12 208B ± 0% 392B ± 0% +88.65% (p=0.008 n=5+5)
err10fld-12 208B ± 0% 970B ± 0% +366.35% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
msgnofld-12 1.00 ± 0% 3.00 ± 0% +200.00% (p=0.008 n=5+5)
str10fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)
err01fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)
err10fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)
2021-12-16T03:43:13+09:00 [ INFO] benchstat rec.go -> zerolog
2021-12-16T03:43:13+09:00 [ INFO] $ benchstat /tmp/rec_benchmark_result.log /tmp/zerolog_benchmark_result.log
name old time/op new time/op delta
msgnofld-12 2.03µs ± 2% 2.13µs ±10% ~ (p=0.690 n=5+5)
str10fld-12 3.50µs ±10% 2.60µs ± 1% -25.87% (p=0.008 n=5+5)
err01fld-12 2.25µs ± 7% 7.76µs ± 6% +245.24% (p=0.008 n=5+5)
err10fld-12 2.90µs ±10% 7.91µs ± 7% +172.62% (p=0.008 n=5+5)
name old alloc/op new alloc/op delta
msgnofld-12 208B ± 0% 328B ± 0% +57.69% (p=0.008 n=5+5)
str10fld-12 208B ± 0% 336B ± 0% +61.54% (p=0.008 n=5+5)
err01fld-12 208B ± 0% 336B ± 0% +61.54% (p=0.008 n=5+5)
err10fld-12 208B ± 0% 336B ± 0% +61.54% (p=0.008 n=5+5)
name old allocs/op new allocs/op delta
msgnofld-12 1.00 ± 0% 3.00 ± 0% +200.00% (p=0.008 n=5+5)
str10fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)
err01fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)
err10fld-12 1.00 ± 0% 4.00 ± 0% +300.00% (p=0.008 n=5+5)