tabular
command output file from processing bench.txt
and verify.txt
Benchmark Attributes
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 826,485 │ 1,470.00 │ 5 │ 416 │ 264.57 ║
║ madkins/flash ║ 858,232 │ 1,398.00 │ 5 │ 504 │ 320.41 ║
║ madkins/replattr ║ 584,486 │ 2,161.00 │ 6 │ 508 │ 207.30 ║
║ madkins/sloggy ║ 422,881 │ 2,857.00 │ 64 │ 1,384 │ 157.14 ║
║ phsym/zeroslog ║ 1,223,892 │ 987.80 │ 2 │ 272 │ 400.91 ║
║ phuslu/slog ║ 1,342,113 │ 890.20 │ 1 │ 240 │ 486.42 ║
║ samber/slog-logrus ║ 62,895 │ 18,940.00 │ 98 │ 9,945 │ 21.54 ║
║ samber/slog-zap ║ 179,326 │ 6,694.00 │ 54 │ 8,089 │ 58.11 ║
║ samber/slog-zerolog ║ 211,618 │ 5,630.00 │ 62 │ 6,287 │ 70.34 ║
║ slog/JSONHandler ║ 836,204 │ 1,487.00 │ 6 │ 472 │ 281.14 ║
║ snqk/meld ║ 462,951 │ 2,558.00 │ 31 │ 2,186 │ 163.39 ║
║ svcrunner/jsonlog ║ 1,000,000 │ 1,111.00 │ 3 │ 280 │ 375.26 ║
║ veqryn/dedup/Append ║ 188,512 │ 6,353.00 │ 41 │ 9,723 │ 65.80 ║
║ veqryn/dedup/Ignore ║ 163,423 │ 6,623.00 │ 41 │ 9,726 │ 63.11 ║
║ veqryn/dedup/Increment ║ 163,794 │ 6,518.00 │ 41 │ 9,729 │ 64.13 ║
║ veqryn/dedup/Overwrite ║ 174,375 │ 6,381.00 │ 41 │ 9,725 │ 65.51 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Big Group
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 23,122 │ 57,101.00 │ 463 │ 11,202 │ 397.03 ║
║ madkins/flash ║ 15,578 │ 78,602.00 │ 15 │ 112,209 │ 329.68 ║
║ madkins/replattr ║ 8,268 │ 148,517.00 │ 16 │ 112,209 │ 174.48 ║
║ madkins/sloggy ║ 7,789 │ 150,076.00 │ 5,086 │ 53,968 │ 172.67 ║
║ phsym/zeroslog ║ 34,695 │ 35,202.00 │ 1 │ 49 │ 644.14 ║
║ phuslu/slog ║ 52,958 │ 22,730.00 │ 1 │ 48 │ 997.84 ║
║ samber/slog-logrus ║ 1,620 │ 780,898.00 │ 8,689 │ 560,293 │ 29.03 ║
║ samber/slog-zap ║ 1,812 │ 677,951.00 │ 8,665 │ 566,122 │ 33.44 ║
║ samber/slog-zerolog ║ 1,773 │ 657,099.00 │ 8,663 │ 593,066 │ 34.51 ║
║ slog/JSONHandler ║ 14,361 │ 86,482.00 │ 14 │ 112,994 │ 262.26 ║
║ snqk/meld ║ 4,074 │ 293,772.00 │ 4,283 │ 322,951 │ 77.20 ║
║ svcrunner/jsonlog ║ 14,200 │ 84,203.00 │ 17 │ 136,705 │ 269.41 ║
║ veqryn/dedup/Append ║ 1,140 │ 952,184.00 │ 6,021 │ 2,031,988 │ 23.82 ║
║ veqryn/dedup/Ignore ║ 1,098 │ 971,754.00 │ 6,021 │ 2,032,220 │ 23.34 ║
║ veqryn/dedup/Increment ║ 1,021 │ 1,062,372.00 │ 6,444 │ 2,111,076 │ 21.35 ║
║ veqryn/dedup/Overwrite ║ 1,110 │ 953,425.00 │ 6,021 │ 2,032,487 │ 23.79 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Disabled
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 38,498,554 │ 29.14 │ 0 │ 0 │ 0.00 ║
║ madkins/flash ║ 322,698,057 │ 3.72 │ 0 │ 0 │ 0.00 ║
║ madkins/replattr ║ 322,343,294 │ 3.72 │ 0 │ 0 │ 0.00 ║
║ madkins/sloggy ║ 321,315,309 │ 3.70 │ 0 │ 0 │ 0.00 ║
║ phsym/zeroslog ║ 325,777,686 │ 3.71 │ 0 │ 0 │ 0.00 ║
║ phuslu/slog ║ 406,693,348 │ 2.95 │ 0 │ 0 │ 0.00 ║
║ samber/slog-logrus ║ 321,488,544 │ 3.72 │ 0 │ 0 │ 0.00 ║
║ samber/slog-zap ║ 320,531,539 │ 3.73 │ 0 │ 0 │ 0.00 ║
║ samber/slog-zerolog ║ 321,547,640 │ 3.72 │ 0 │ 0 │ 0.00 ║
║ slog/JSONHandler ║ 321,153,603 │ 3.71 │ 0 │ 0 │ 0.00 ║
║ snqk/meld ║ 272,938,104 │ 4.54 │ 0 │ 0 │ 0.00 ║
║ svcrunner/jsonlog ║ 405,683,785 │ 2.94 │ 0 │ 0 │ 0.00 ║
║ veqryn/dedup/Append ║ 275,542,993 │ 4.35 │ 0 │ 0 │ 0.00 ║
║ veqryn/dedup/Ignore ║ 276,377,785 │ 4.35 │ 0 │ 0 │ 0.00 ║
║ veqryn/dedup/Increment ║ 276,753,546 │ 4.34 │ 0 │ 0 │ 0.00 ║
║ veqryn/dedup/Overwrite ║ 276,120,013 │ 4.33 │ 0 │ 0 │ 0.00 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Key Values
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 801,086 │ 1,539.00 │ 5 │ 417 │ 252.83 ║
║ madkins/flash ║ 783,176 │ 1,450.00 │ 5 │ 504 │ 308.91 ║
║ madkins/replattr ║ 557,534 │ 2,109.00 │ 6 │ 508 │ 212.42 ║
║ madkins/sloggy ║ 410,377 │ 2,924.00 │ 64 │ 1,384 │ 153.55 ║
║ phsym/zeroslog ║ 1,000,000 │ 1,031.00 │ 2 │ 272 │ 383.93 ║
║ phuslu/slog ║ 1,273,650 │ 949.10 │ 1 │ 240 │ 456.22 ║
║ samber/slog-logrus ║ 62,442 │ 19,067.00 │ 98 │ 9,945 │ 21.40 ║
║ samber/slog-zap ║ 179,262 │ 6,582.00 │ 54 │ 8,089 │ 59.10 ║
║ samber/slog-zerolog ║ 205,171 │ 5,849.00 │ 62 │ 6,287 │ 67.70 ║
║ slog/JSONHandler ║ 787,227 │ 1,524.00 │ 6 │ 472 │ 274.26 ║
║ snqk/meld ║ 435,186 │ 2,655.00 │ 31 │ 2,186 │ 157.43 ║
║ svcrunner/jsonlog ║ 1,000,000 │ 1,171.00 │ 3 │ 280 │ 355.99 ║
║ veqryn/dedup/Append ║ 156,691 │ 6,426.00 │ 41 │ 9,725 │ 65.05 ║
║ veqryn/dedup/Ignore ║ 190,842 │ 6,341.00 │ 41 │ 9,724 │ 65.92 ║
║ veqryn/dedup/Increment ║ 182,868 │ 6,536.00 │ 41 │ 9,728 │ 63.95 ║
║ veqryn/dedup/Overwrite ║ 163,837 │ 6,297.00 │ 41 │ 9,726 │ 66.38 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Logging
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 39,433 │ 30,486.00 │ 51 │ 1,635 │ 271.99 ║
║ madkins/flash ║ 34,362 │ 35,008.00 │ 153 │ 11,840 │ 274.68 ║
║ madkins/replattr ║ 22,665 │ 52,639.00 │ 204 │ 12,043 │ 182.58 ║
║ madkins/sloggy ║ 17,286 │ 69,244.00 │ 1,865 │ 26,992 │ 138.83 ║
║ phsym/zeroslog ║ 66,741 │ 17,974.00 │ 0 │ 0 │ 472.68 ║
║ phuslu/slog ║ 84,087 │ 14,277.00 │ 0 │ 0 │ 616.52 ║
║ samber/slog-logrus ║ 2,744 │ 439,162.00 │ 2,857 │ 223,005 │ 19.20 ║
║ samber/slog-zap ║ 10,000 │ 119,227.00 │ 1,224 │ 152,374 │ 69.55 ║
║ samber/slog-zerolog ║ 12,454 │ 98,613.00 │ 1,326 │ 111,441 │ 86.15 ║
║ slog/JSONHandler ║ 46,425 │ 26,392.00 │ 0 │ 0 │ 333.13 ║
║ snqk/meld ║ 24,340 │ 48,846.00 │ 561 │ 30,214 │ 180.03 ║
║ svcrunner/jsonlog ║ 57,238 │ 20,916.00 │ 0 │ 0 │ 430.24 ║
║ veqryn/dedup/Append ║ 7,280 │ 146,469.00 │ 867 │ 224,840 │ 60.06 ║
║ veqryn/dedup/Ignore ║ 7,023 │ 146,867.00 │ 867 │ 224,880 │ 59.90 ║
║ veqryn/dedup/Increment ║ 7,112 │ 146,571.00 │ 867 │ 224,672 │ 60.02 ║
║ veqryn/dedup/Overwrite ║ 7,192 │ 144,735.00 │ 867 │ 224,707 │ 60.79 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Simple
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 3,128,997 │ 377.40 │ 1 │ 32 │ 193.45 ║
║ madkins/flash ║ 2,625,055 │ 466.60 │ 3 │ 232 │ 188.59 ║
║ madkins/replattr ║ 1,877,370 │ 633.30 │ 4 │ 236 │ 138.95 ║
║ madkins/sloggy ║ 1,726,477 │ 699.40 │ 14 │ 240 │ 127.25 ║
║ phsym/zeroslog ║ 5,776,435 │ 207.10 │ 0 │ 0 │ 371.89 ║
║ phuslu/slog ║ 7,680,477 │ 156.80 │ 0 │ 0 │ 529.27 ║
║ samber/slog-logrus ║ 356,473 │ 3,345.00 │ 26 │ 1,481 │ 21.83 ║
║ samber/slog-zap ║ 2,521,752 │ 469.70 │ 2 │ 336 │ 155.43 ║
║ samber/slog-zerolog ║ 3,091,030 │ 384.80 │ 2 │ 336 │ 200.12 ║
║ slog/JSONHandler ║ 3,535,060 │ 297.30 │ 0 │ 0 │ 279.18 ║
║ snqk/meld ║ 3,826,831 │ 318.70 │ 0 │ 0 │ 257.26 ║
║ svcrunner/jsonlog ║ 4,845,733 │ 249.90 │ 0 │ 0 │ 348.14 ║
║ veqryn/dedup/Append ║ 2,366,554 │ 506.90 │ 6 │ 280 │ 163.76 ║
║ veqryn/dedup/Ignore ║ 2,391,015 │ 503.90 │ 6 │ 280 │ 160.76 ║
║ veqryn/dedup/Increment ║ 2,375,912 │ 501.80 │ 6 │ 280 │ 165.41 ║
║ veqryn/dedup/Overwrite ║ 2,430,026 │ 528.00 │ 6 │ 280 │ 157.20 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark Simple Source
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 1,954,303 │ 608.80 │ 3 │ 280 │ 175.76 ║
║ madkins/flash ║ 1,261,783 │ 962.00 │ 7 │ 704 │ 295.23 ║
║ madkins/replattr ║ 956,200 │ 1,191.00 │ 8 │ 712 │ 238.41 ║
║ madkins/sloggy ║ 643,446 │ 1,794.00 │ 30 │ 1,280 │ 158.90 ║
║ phsym/zeroslog ║ 2,400,784 │ 505.00 │ 4 │ 312 │ 299.00 ║
║ phuslu/slog ║ 5,512,314 │ 221.70 │ 0 │ 0 │ 1,091.33 ║
║ samber/slog-logrus ║ 149,390 │ 8,023.00 │ 63 │ 4,277 │ 33.28 ║
║ samber/slog-zap ║ 1,602,453 │ 744.50 │ 5 │ 592 │ 143.73 ║
║ samber/slog-zerolog ║ 438,829 │ 2,572.00 │ 38 │ 2,715 │ 105.36 ║
║ slog/JSONHandler ║ 1,409,199 │ 848.00 │ 6 │ 568 │ 326.66 ║
║ snqk/meld ║ 1,369,372 │ 892.90 │ 6 │ 568 │ 310.23 ║
║ svcrunner/jsonlog ║ 4,860,561 │ 249.40 │ 0 │ 0 │ 348.78 ║
║ veqryn/dedup/Append ║ 1,000,000 │ 1,089.00 │ 12 │ 848 │ 254.35 ║
║ veqryn/dedup/Ignore ║ 1,000,000 │ 1,074.00 │ 12 │ 848 │ 257.99 ║
║ veqryn/dedup/Increment ║ 1,000,000 │ 1,092.00 │ 12 │ 848 │ 253.56 ║
║ veqryn/dedup/Overwrite ║ 1,000,000 │ 1,074.00 │ 12 │ 848 │ 257.90 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark With Attrs Attributes
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 781,458 │ 1,483.00 │ 5 │ 416 │ 496.93 ║
║ madkins/flash ║ 862,687 │ 1,406.00 │ 5 │ 504 │ 597.53 ║
║ madkins/replattr ║ 604,876 │ 2,066.00 │ 6 │ 508 │ 406.53 ║
║ madkins/sloggy ║ 419,193 │ 2,854.00 │ 64 │ 1,384 │ 294.72 ║
║ phsym/zeroslog ║ 1,000,000 │ 1,001.00 │ 2 │ 272 │ 746.35 ║
║ phuslu/slog ║ 1,315,291 │ 906.00 │ 1 │ 240 │ 899.60 ║
║ samber/slog-logrus ║ 40,914 │ 28,966.00 │ 140 │ 16,888 │ 22.30 ║
║ samber/slog-zap ║ 100,190 │ 11,573.00 │ 79 │ 15,436 │ 52.54 ║
║ samber/slog-zerolog ║ 129,356 │ 9,827.00 │ 94 │ 11,595 │ 62.89 ║
║ slog/JSONHandler ║ 796,252 │ 1,498.00 │ 6 │ 472 │ 523.91 ║
║ snqk/meld ║ 308,712 │ 3,719.00 │ 38 │ 3,363 │ 176.38 ║
║ svcrunner/jsonlog ║ 1,000,000 │ 1,125.00 │ 4 │ 288 │ 692.60 ║
║ veqryn/dedup/Append ║ 93,103 │ 11,946.00 │ 100 │ 16,466 │ 57.01 ║
║ veqryn/dedup/Ignore ║ 114,049 │ 9,199.00 │ 61 │ 14,074 │ 71.31 ║
║ veqryn/dedup/Increment ║ 92,815 │ 12,006.00 │ 74 │ 15,324 │ 66.14 ║
║ veqryn/dedup/Overwrite ║ 118,394 │ 9,304.00 │ 63 │ 14,166 │ 70.51 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark With Attrs Key Values
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 773,449 │ 1,536.00 │ 5 │ 416 │ 479.74 ║
║ madkins/flash ║ 819,880 │ 1,448.00 │ 5 │ 504 │ 579.32 ║
║ madkins/replattr ║ 561,586 │ 2,110.00 │ 6 │ 508 │ 398.02 ║
║ madkins/sloggy ║ 396,854 │ 2,914.00 │ 64 │ 1,384 │ 288.59 ║
║ phsym/zeroslog ║ 1,000,000 │ 1,035.00 │ 2 │ 272 │ 721.47 ║
║ phuslu/slog ║ 1,250,103 │ 956.30 │ 1 │ 240 │ 852.24 ║
║ samber/slog-logrus ║ 41,234 │ 29,001.00 │ 140 │ 16,885 │ 22.28 ║
║ samber/slog-zap ║ 103,438 │ 11,614.00 │ 79 │ 15,434 │ 52.35 ║
║ samber/slog-zerolog ║ 125,467 │ 9,914.00 │ 94 │ 11,595 │ 62.34 ║
║ slog/JSONHandler ║ 761,126 │ 1,519.00 │ 6 │ 472 │ 516.81 ║
║ snqk/meld ║ 324,015 │ 3,858.00 │ 38 │ 3,363 │ 169.79 ║
║ svcrunner/jsonlog ║ 1,000,000 │ 1,164.00 │ 4 │ 288 │ 669.34 ║
║ veqryn/dedup/Append ║ 93,790 │ 12,058.00 │ 100 │ 16,464 │ 56.48 ║
║ veqryn/dedup/Ignore ║ 119,426 │ 9,341.00 │ 61 │ 14,074 │ 70.23 ║
║ veqryn/dedup/Increment ║ 91,824 │ 12,123.00 │ 74 │ 15,323 │ 65.50 ║
║ veqryn/dedup/Overwrite ║ 122,448 │ 9,311.00 │ 63 │ 14,167 │ 70.45 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark With Attrs Simple
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 3,108,762 │ 387.40 │ 1 │ 32 │ 1,086.80 ║
║ madkins/flash ║ 2,519,532 │ 474.20 │ 3 │ 232 │ 1,012.24 ║
║ madkins/replattr ║ 1,876,204 │ 644.70 │ 4 │ 236 │ 744.54 ║
║ madkins/sloggy ║ 1,725,991 │ 726.50 │ 14 │ 240 │ 662.10 ║
║ phsym/zeroslog ║ 5,613,226 │ 211.20 │ 0 │ 0 │ 2,026.18 ║
║ phuslu/slog ║ 7,370,361 │ 163.20 │ 0 │ 0 │ 2,848.48 ║
║ samber/slog-logrus ║ 64,270 │ 18,747.00 │ 93 │ 8,843 │ 23.47 ║
║ samber/slog-zap ║ 201,897 │ 6,093.00 │ 49 │ 6,983 │ 69.10 ║
║ samber/slog-zerolog ║ 231,096 │ 4,992.00 │ 57 │ 5,181 │ 85.74 ║
║ slog/JSONHandler ║ 3,910,188 │ 313.30 │ 0 │ 0 │ 1,436.26 ║
║ snqk/meld ║ 663,243 │ 1,727.00 │ 8 │ 1,001 │ 260.50 ║
║ svcrunner/jsonlog ║ 3,658,884 │ 336.10 │ 1 │ 8 │ 1,335.95 ║
║ veqryn/dedup/Append ║ 173,413 │ 6,144.00 │ 39 │ 9,049 │ 73.24 ║
║ veqryn/dedup/Ignore ║ 178,333 │ 6,087.00 │ 39 │ 9,048 │ 73.93 ║
║ veqryn/dedup/Increment ║ 166,534 │ 6,431.00 │ 39 │ 9,055 │ 69.98 ║
║ veqryn/dedup/Overwrite ║ 173,163 │ 6,071.00 │ 39 │ 9,049 │ 74.13 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark With Group Attributes
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 782,722 │ 1,578.00 │ 7 │ 505 │ 255.40 ║
║ madkins/flash ║ 806,840 │ 1,410.00 │ 5 │ 504 │ 328.26 ║
║ madkins/replattr ║ 543,156 │ 2,060.00 │ 6 │ 508 │ 224.77 ║
║ madkins/sloggy ║ 389,224 │ 2,916.00 │ 64 │ 1,384 │ 158.77 ║
║ phsym/zeroslog ║ 1,000,000 │ 1,141.00 │ 3 │ 560 │ 359.33 ║
║ phuslu/slog ║ 1,320,504 │ 910.30 │ 1 │ 240 │ 491.07 ║
║ samber/slog-logrus ║ 50,664 │ 23,047.00 │ 172 │ 16,217 │ 16.40 ║
║ samber/slog-zap ║ 99,180 │ 12,641.00 │ 146 │ 14,604 │ 29.90 ║
║ samber/slog-zerolog ║ 96,698 │ 11,930.00 │ 147 │ 14,780 │ 32.02 ║
║ slog/JSONHandler ║ 810,202 │ 1,452.00 │ 6 │ 472 │ 297.48 ║
║ snqk/meld ║ 437,926 │ 2,603.00 │ 34 │ 2,074 │ 165.99 ║
║ svcrunner/jsonlog ║ 1,000,000 │ 1,134.00 │ 4 │ 296 │ 380.12 ║
║ veqryn/dedup/Append ║ 135,709 │ 7,897.00 │ 50 │ 13,270 │ 54.70 ║
║ veqryn/dedup/Ignore ║ 133,767 │ 7,854.00 │ 50 │ 13,271 │ 55.01 ║
║ veqryn/dedup/Increment ║ 125,115 │ 8,395.00 │ 50 │ 13,292 │ 51.46 ║
║ veqryn/dedup/Overwrite ║ 136,819 │ 7,859.00 │ 50 │ 13,271 │ 54.97 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Benchmark With Group Key Values
╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗
║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║
╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣
║ chanchal/zaphandler ║ 731,751 │ 1,600.00 │ 7 │ 505 │ 251.94 ║
║ madkins/flash ║ 836,881 │ 1,593.00 │ 5 │ 504 │ 290.60 ║
║ madkins/replattr ║ 566,210 │ 2,104.00 │ 6 │ 508 │ 220.02 ║
║ madkins/sloggy ║ 407,514 │ 2,955.00 │ 64 │ 1,384 │ 157.04 ║
║ phsym/zeroslog ║ 975,250 │ 1,214.00 │ 3 │ 560 │ 337.83 ║
║ phuslu/slog ║ 1,261,922 │ 961.40 │ 1 │ 240 │ 464.97 ║
║ samber/slog-logrus ║ 51,464 │ 22,575.00 │ 172 │ 16,215 │ 16.74 ║
║ samber/slog-zap ║ 93,853 │ 12,397.00 │ 146 │ 14,605 │ 30.49 ║
║ samber/slog-zerolog ║ 100,928 │ 12,061.00 │ 147 │ 14,779 │ 31.67 ║
║ slog/JSONHandler ║ 772,526 │ 1,546.00 │ 6 │ 472 │ 278.84 ║
║ snqk/meld ║ 456,944 │ 2,695.00 │ 34 │ 2,074 │ 160.32 ║
║ svcrunner/jsonlog ║ 911,166 │ 1,167.00 │ 4 │ 296 │ 369.41 ║
║ veqryn/dedup/Append ║ 143,156 │ 8,156.00 │ 50 │ 13,265 │ 52.84 ║
║ veqryn/dedup/Ignore ║ 142,053 │ 7,977.00 │ 50 │ 13,272 │ 54.15 ║
║ veqryn/dedup/Increment ║ 131,749 │ 8,245.00 │ 50 │ 13,289 │ 52.39 ║
║ veqryn/dedup/Overwrite ║ 141,794 │ 7,830.00 │ 50 │ 13,271 │ 55.17 ║
╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝
Warnings for chanchal/zaphandler:
Required
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
missing key "c": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:146)
missing key "c": a Handler should not output groups if there are no attributes (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:161)
1 [WithGroupEmpty] Empty WithGroup() logged
Verify:WithGroupEmpty: too many fields, found field 'group1', value is group, length: 0
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","group1":{}}
Implied
1 [CanceledContext] Canceled context blocks logging
Verify:CanceledContext
8 [LevelMath] Log levels are not properly treated as integers
Verify:DefaultLevel: INFO+1 is not enabled when WARN is set
Verify:DefaultLevel: INFO+1 is not enabled when WARN is set
Verify:LevelConfigured: 1 is not enabled when INFO is set
Verify:LevelConfigured: 1 is not enabled when INFO is set
Verify:LevelDifferent: 5 is not enabled when WARN is set
Verify:LevelDifferent: 5 is not enabled when WARN is set
Verify:LevelVar: INFO+1 is not enabled when INFO is set
Verify:LevelVar: 5 is not enabled when WARN is enabled
3 [NoReplAttr] HandlerOptions.ReplaceAttr not available
Verify:ReplaceAttr: too many attributes: 6, alpha == beta, change still exists, remove still exists
Verify:ReplaceAttrBasic:
too many attributes: 4
time field still exists
msg field still exists
source ==
Verify:ReplaceAttrFnRemoveEmptyKey
3 [NoReplAttrBasic] HandlerOptions.ReplaceAttr not available for basic fields
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","alpha":"omega","pi":3.141592653589793,"alpha":"omega","goober":"snoofus","e":2.718281828459045,"alpha":"omega","gibbering":"lunatic","phi":1.618033988749895,"group":{}}
Verify:ReplaceAttrFnRemoveTime: time value not empty string
2 [SourceCaller] Source data logged as 'caller' instead of 'source'
Bench:SimpleSource: tests/benchmarks.go:96
{"level":"info","time":"2024-09-15T01:27:32Z","caller":"tests/benchmarks.go:96","msg":"This is a message"}
Verify:SourceKey: reflect/value.go:596
{"level":"info","time":"2024-09-15T01:31:56Z","caller":"reflect/value.go:596","msg":"This is a message"}
2 [WithGroup] WithGroup doesn't embed following attributes into group
Verify:GroupWithMulti
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","first":"one","second":2,"third":"3","group":{"subGroup":{"fourth":"forth","pi":3.141592653589793}}}
Verify:GroupWithMultiSubEmpty
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","first":"one","second":2,"third":"3","group":{}}
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
1 [DurationSeconds] slog.Duration() logs seconds instead of nanoseconds
Verify:LogAttributes
1 [GroupWithTop] ^WithGroup().With()^ ends up at top level of log record instead of in the group
Verify:GroupWithTop
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","key":"value","group":{}}
10 [LevelCase] Log level in lowercase
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:KeyCase: 'warn'
Verify:KeyCase: 'error'
Verify:KeyCase: 'debug'
Verify:KeyCase: 'info'
Verify:Keys: 'info'
Verify:SourceKey: 'info'
Verify:ZeroPC: 'info'
Verify:ZeroTime: 'info'
1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds
Verify:LogAttributes: 2024-09-15T01:31:56Z
Warnings for madkins/flash:
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
Warnings for madkins/replattr:
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
Warnings for madkins/sloggy:
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
Warnings for phsym/zeroslog:
Required
3 [EmptyAttributes] Empty attribute(s) logged ("":null)
Verify:AttributeWithEmpty
{"level":"info","":null,"first":"one","pi":3.141592653589793,"time":"2024-09-15T01:31:56Z","message":"This is a message"}
Verify:AttributesEmpty
{"level":"info","first":"one","":null,"pi":3.141592653589793,"time":"2024-09-15T01:31:56Z","message":"This is a message"}
Verify:AttributesWithEmpty
{"level":"info","first":"one","second":2,"":null,"pi":3.141592653589793,"time":"2024-09-15T01:31:56Z","message":"This is a message"}
1 [GroupEmpty] Empty (sub)group(s) logged
Verify:GroupWithMultiSubEmpty: found 'subGroup' group
{"level":"info","first":"one","group":{"second":2,"third":"3","subGroup":{}},"time":"2024-09-15T01:31:56Z","message":"This is a message"}
1 [GroupInline] Group with empty key does not inline subfields
Verify:GroupInline
{"level":"info","first":"one","":{"second":2,"third":"3","fourth":"forth"},"pi":3.141592653589793,"time":"2024-09-15T01:31:56Z","message":"This is a message"}
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
missing key "msg": this test expects slog.TimeKey, slog.LevelKey and slog.MessageKey (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:39)
unexpected key "": a Handler should ignore an empty Attr (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:61)
unexpected key "time": a Handler should ignore a zero Record.Time (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:73)
missing key "c": a Handler should inline the Attrs of a group with an empty key (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:119)
missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:132)
missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:146)
missing key "msg": a Handler should not output groups if there are no attributes (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:161)
unexpected key "H": a Handler should not output groups if there are no attributes (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:161)
1 [WithGroupEmpty] Empty WithGroup() logged
Verify:WithGroupEmpty: too many fields, found field 'group1', value is group, length: 1
{"level":"info","group1":{"group2":{}},"time":"2024-09-15T01:31:56Z","message":"This is a message"}
1 [ZeroTime] Zero time is logged
Verify:ZeroTime: 0001-01-01T00:00:00Z
{"level":"info","time":"0001-01-01T00:00:00Z","message":"This is a message"}
Implied
7 [MessageKey] Wrong message key (should be 'msg')
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:Keys: `message`
Verify:SourceKey: `message`
Verify:ZeroPC: `message`
Verify:ZeroTime: `message`
7 [NoReplAttr] HandlerOptions.ReplaceAttr not available
Verify:ReplaceAttr: too many attributes: 6, alpha == beta, change still exists, remove still exists
Verify:ReplaceAttrBasic:
too many attributes: 4
time field still exists
message field still exists
source ==
Verify:ReplaceAttrFnChangeKey:
too few attributes: 3
no message key
message not string
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"level":"info","group":{"alpha":"omega","pi":3.141592653589793,"subGroup":{"alpha":"omega","goober":"snoofus","e":2.718281828459045,"oneMore":{"alpha":"omega","gibbering":"lunatic","phi":1.618033988749895}}},"time":"2024-09-15T01:31:56Z","message":"This is a message"}
Verify:ReplaceAttrFnRemoveEmptyKey
Verify:ReplaceAttrFnRemoveTime: time value not empty string
2 [SourceCaller] Source data logged as 'caller' instead of 'source'
Bench:SimpleSource: /home/runner/work/go-slog/go-slog/bench/tests/benchmarks.go:96
{"level":"info","caller":"/home/runner/work/go-slog/go-slog/bench/tests/benchmarks.go:96","time":"2024-09-15T01:28:59Z","message":"This is a message"}
Verify:SourceKey: /opt/hostedtoolcache/go/1.22.7/x64/src/reflect/value.go:596
{"level":"info","caller":"/opt/hostedtoolcache/go/1.22.7/x64/src/reflect/value.go:596","time":"2024-09-15T01:31:56Z","message":"This is a message"}
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
1 [DurationMillis] slog.Duration() logs milliseconds instead of nanoseconds
Verify:LogAttributes
11 [LevelCase] Log level in lowercase
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:KeyCase: 'debug'
Verify:KeyCase: 'info'
Verify:KeyCase: 'warn'
Verify:KeyCase: 'error'
Verify:Keys: 'info'
Verify:SourceKey: 'info'
Verify:ZeroPC: 'info'
Verify:ZeroTime: 'info'
1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds
Verify:LogAttributes: 2024-09-15T01:31:56Z
Warnings for phuslu/slog:
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
Warnings for samber/slog-logrus:
Required
4 [Resolver] LogValuer objects are not resolved
Verify:ResolveGroup
{"group":{"hidden":{},"pi":3.141592653589793},"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
Verify:ResolveGroupWith
{"group":{"hidden":{},"pi":3.141592653589793},"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
Verify:ResolveValuer
{"hidden":{},"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
Verify:ResolveWith
{"hidden":{},"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
unexpected key "time": a Handler should ignore a zero Record.Time (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:73)
missing key "c": a Handler should inline the Attrs of a group with an empty key (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:119)
"k": got map[string]interface {}{}, want "replaced": a Handler should call Resolve on attribute values (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:176)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:184)
"k": got map[string]interface {}{}, want "replaced": a Handler should call Resolve on attribute values from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:198)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:207)
1 [ZeroTime] Zero time is logged
Verify:ZeroTime: 2024-09-15T01:31:56Z
{"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
Implied
5 [NoReplAttrBasic] HandlerOptions.ReplaceAttr not available for basic fields
Verify:ReplaceAttrBasic:
too many attributes: 4
time field still exists
msg field still exists
source == map[file:/home/runner/work/go-slog/go-slog/verify/tests/replace.go function:github.com/madkins23/go-slog/verify/tests.(*SlogTestSuite).TestReplaceAttrBasic line:89]
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"group":{"alpha":"OMEGA","pi":3.141592653589793,"subGroup":{"e":2.718281828459045,"goober":"snoofus","la la la":"omega","oneMore":{"alpha":"omega","gibbering":"moontic","phi":1.618033988749895}}},"level":"info","msg":"This is a message","time":"2024-09-15T01:31:56Z"}
Verify:ReplaceAttrFnRemoveEmptyKey
Verify:ReplaceAttrFnRemoveTime: time value not empty string
Suggested
10 [LevelCase] Log level in lowercase
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:KeyCase: 'info'
Verify:KeyCase: 'error'
Verify:KeyCase: 'debug'
Verify:Keys: 'info'
Verify:SourceKey: 'info'
Verify:ZeroPC: 'info'
Verify:ZeroTime: 'info'
1 [LevelWrong] Log level is incorrect
Verify:KeyCase: should be 'WARN', not 'warning'
4 [NoEmptyName] Attributes with empty names are not logged
Verify:AttributeEmptyName
{"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"time":"2024-09-15T01:31:56Z"}
Verify:AttributeWithEmptyName
{"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"time":"2024-09-15T01:31:56Z"}
Verify:AttributesNotEmpty
{"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"time":"2024-09-15T01:31:56Z"}
Verify:AttributesWithNotEmpty
{"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"second":2,"time":"2024-09-15T01:31:56Z"}
Administrative
3 [Unused] Unused Warnings(s)
Verify:GroupInline: GroupInline
Verify:WithGroupInline: GroupInline
Verify:ZeroPC: ZeroPC
Warnings for samber/slog-zap:
Required
4 [Resolver] LogValuer objects are not resolved
Verify:ResolveGroup
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","group":{"hidden":{},"pi":3.141592653589793}}
Verify:ResolveGroupWith
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","group":{"hidden":{},"pi":3.141592653589793}}
Verify:ResolveValuer
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","hidden":{}}
Verify:ResolveWith
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","hidden":{}}
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
unexpected key "time": a Handler should ignore a zero Record.Time (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:73)
missing key "c": a Handler should inline the Attrs of a group with an empty key (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:119)
"k": got "", want "replaced": a Handler should call Resolve on attribute values (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:176)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:184)
"k": got "", want "replaced": a Handler should call Resolve on attribute values from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:198)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:207)
1 [ZeroPC] SourceKey logged for zero PC
Verify:ZeroPC: non-standard key 'caller'
{"level":"info","time":"2024-09-15T01:31:56Z","caller":":0","msg":"This is a message"}
1 [ZeroTime] Zero time is logged
Verify:ZeroTime: 2024-09-15T01:31:56Z
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message"}
Implied
5 [NoReplAttrBasic] HandlerOptions.ReplaceAttr not available for basic fields
Verify:ReplaceAttrBasic:
too many attributes: 4
time field still exists
msg field still exists
source ==
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","group":{"alpha":"OMEGA","pi":3.141592653589793,"subGroup":{"e":2.718281828459045,"goober":"snoofus","la la la":"omega","oneMore":{"alpha":"omega","gibbering":"moontic","phi":1.618033988749895}}}}
Verify:ReplaceAttrFnRemoveEmptyKey
Verify:ReplaceAttrFnRemoveTime: time value not empty string
2 [SourceCaller] Source data logged as 'caller' instead of 'source'
Bench:SimpleSource: tests/benchmarks.go:96
{"level":"info","time":"2024-09-15T01:29:53Z","caller":"tests/benchmarks.go:96","msg":"This is a message"}
Verify:SourceKey: reflect/value.go:596
{"level":"info","time":"2024-09-15T01:31:56Z","caller":"reflect/value.go:596","msg":"This is a message"}
Suggested
1 [DurationSeconds] slog.Duration() logs seconds instead of nanoseconds
Verify:LogAttributes
1 [GroupDuration]
Verify:GroupDuration: 29002.000000 != 29002000000000.000000
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","outer":29002,"group":{"inner":29002000000000}}
11 [LevelCase] Log level in lowercase
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:KeyCase: 'error'
Verify:KeyCase: 'debug'
Verify:KeyCase: 'info'
Verify:KeyCase: 'warn'
Verify:Keys: 'info'
Verify:SourceKey: 'info'
Verify:ZeroPC: 'info'
Verify:ZeroTime: 'info'
4 [NoEmptyName] Attributes with empty names are not logged
Verify:AttributeEmptyName
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributeWithEmptyName
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributesNotEmpty
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributesWithNotEmpty
{"level":"info","time":"2024-09-15T01:31:56Z","msg":"This is a message","pi":3.141592653589793,"first":"one","second":2}
1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds
Verify:LogAttributes: 2024-09-15T01:31:56Z
Administrative
2 [Unused] Unused Warnings(s)
Verify:GroupInline: GroupInline
Verify:WithGroupInline: GroupInline
Warnings for samber/slog-zerolog:
Required
4 [Resolver] LogValuer objects are not resolved
Verify:ResolveGroup
{"level":"info","time":"2024-09-15T01:31:56Z","group":{"hidden":{},"pi":3.141592653589793},"message":"This is a message"}
Verify:ResolveGroupWith
{"level":"info","time":"2024-09-15T01:31:56Z","group":{"hidden":{},"pi":3.141592653589793},"message":"This is a message"}
Verify:ResolveValuer
{"level":"info","time":"2024-09-15T01:31:56Z","hidden":{},"message":"This is a message"}
Verify:ResolveWith
{"level":"info","time":"2024-09-15T01:31:56Z","hidden":{},"message":"This is a message"}
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
missing key "msg": this test expects slog.TimeKey, slog.LevelKey and slog.MessageKey (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:39)
unexpected key "time": a Handler should ignore a zero Record.Time (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:73)
missing key "c": a Handler should inline the Attrs of a group with an empty key (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:119)
missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:132)
missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:146)
missing key "msg": a Handler should not output groups if there are no attributes (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:161)
"k": got map[string]interface {}{}, want "replaced": a Handler should call Resolve on attribute values (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:176)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:184)
"k": got map[string]interface {}{}, want "replaced": a Handler should call Resolve on attribute values from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:198)
"b": got map[string]interface {}{}, want "v2": a Handler should call Resolve on attribute values in groups from WithAttrs (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:207)
1 [ZeroTime] Zero time is logged
Verify:ZeroTime: 0001-01-01T00:00:00Z
{"level":"info","time":"0001-01-01T00:00:00Z","message":"This is a message"}
Implied
2 [DefaultLevel] Handler doesn't default to slog.LevelInfo
Verify:DefaultLevel: defaultlevel is 'DEBUG'
Verify:DefaultLevel: defaultlevel with AddSource is 'DEBUG'
7 [MessageKey] Wrong message key (should be 'msg')
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:Keys: `message`
Verify:SourceKey: `message`
Verify:ZeroPC: `message`
Verify:ZeroTime: `message`
6 [NoReplAttrBasic] HandlerOptions.ReplaceAttr not available for basic fields
Verify:ReplaceAttrBasic:
too many attributes: 4
time field still exists
message field still exists
source == map[file:/home/runner/work/go-slog/go-slog/verify/tests/replace.go function:github.com/madkins23/go-slog/verify/tests.(*SlogTestSuite).TestReplaceAttrBasic line:89]
Verify:ReplaceAttrFnChangeKey:
too few attributes: 3
no message key
message not string
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"level":"info","time":"2024-09-15T01:31:56Z","group":{"alpha":"OMEGA","pi":3.141592653589793,"subGroup":{"e":2.718281828459045,"goober":"snoofus","la la la":"omega","oneMore":{"alpha":"omega","gibbering":"moontic","phi":1.618033988749895}}},"message":"This is a message"}
Verify:ReplaceAttrFnRemoveEmptyKey
Verify:ReplaceAttrFnRemoveTime: time value not empty string
Suggested
1 [DurationMillis] slog.Duration() logs milliseconds instead of nanoseconds
Verify:LogAttributes
1 [GroupDuration]
Verify:GroupDuration: 29002000.000000 != 29002000000000.000000
{"level":"info","time":"2024-09-15T01:31:56Z","group":{"inner":29002000000000},"outer":29002000,"message":"This is a message"}
11 [LevelCase] Log level in lowercase
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:CanceledContext: 'info'
Verify:KeyCase: 'debug'
Verify:KeyCase: 'info'
Verify:KeyCase: 'warn'
Verify:KeyCase: 'error'
Verify:Keys: 'info'
Verify:SourceKey: 'info'
Verify:ZeroPC: 'info'
Verify:ZeroTime: 'info'
4 [NoEmptyName] Attributes with empty names are not logged
Verify:AttributeEmptyName
{"level":"info","time":"2024-09-15T01:31:56Z","first":"one","pi":3.141592653589793,"message":"This is a message"}
Verify:AttributeWithEmptyName
{"level":"info","time":"2024-09-15T01:31:56Z","first":"one","pi":3.141592653589793,"message":"This is a message"}
Verify:AttributesNotEmpty
{"level":"info","time":"2024-09-15T01:31:56Z","first":"one","pi":3.141592653589793,"message":"This is a message"}
Verify:AttributesWithNotEmpty
{"level":"info","time":"2024-09-15T01:31:56Z","first":"one","pi":3.141592653589793,"second":2,"message":"This is a message"}
1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds
Verify:LogAttributes: 2024-09-15T01:31:56Z
Administrative
3 [Unused] Unused Warnings(s)
Verify:GroupInline: GroupInline
Verify:WithGroupInline: GroupInline
Verify:ZeroPC: ZeroPC
Warnings for slog/JSONHandler:
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
Warnings for snqk/meld:
Warnings for svcrunner/jsonlog:
Required
1 [LevelVar] Unable to change level during execution via LevelVar
Verify:LevelVar: level not changed
1 [SlogTest] Failure of embedded slog/slogtest
Verify:SlogTest:
missing key "msg": this test expects slog.TimeKey, slog.LevelKey and slog.MessageKey (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:39)
missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:132)
missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:146)
missing key "msg": a Handler should not output groups if there are no attributes (/opt/hostedtoolcache/go/1.22.7/x64/src/testing/slogtest/slogtest.go:161)
Implied
7 [MessageKey] Wrong message key (should be 'msg')
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:CanceledContext: `message`
Verify:Keys: `message`
Verify:SourceKey: `message`
Verify:ZeroPC: `message`
Verify:ZeroTime: `message`
7 [NoReplAttr] HandlerOptions.ReplaceAttr not available
Verify:ReplaceAttr: too many attributes: 6, alpha == beta, change still exists, remove still exists
Verify:ReplaceAttrBasic:
time field still exists
message field still exists
source ==
Verify:ReplaceAttrFnChangeKey:
too few attributes: 3
no message key
message not string
Verify:ReplaceAttrFnLevelCase: level value not null
Verify:ReplaceAttrFnMulti
{"time":"2024-09-15T01:31:56.40384321Z","level":"INFO","message":"This is a message","group":{"alpha":"omega","pi":3.141592653589793,"subGroup":{"alpha":"omega","goober":"snoofus","e":2.718281828459045,"oneMore":{"alpha":"omega","gibbering":"lunatic","phi":1.618033988749895}}}}
Verify:ReplaceAttrFnRemoveEmptyKey
Verify:ReplaceAttrFnRemoveTime: time value not empty string
2 [SourceKey] Source data not logged when AddSource flag set
Bench:SimpleSource: no 'source' key
{"time":"2024-09-15T01:30:27.817249196Z","level":"INFO","message":"This is a message"}
Verify:SourceKey: no 'source' key
{"time":"2024-09-15T01:31:56.404569623Z","level":"INFO","message":"This is a message"}
Suggested
2 [Duplicates] Duplicate field(s) found
Verify:AttributeDuplicate: map[alpha:2 charlie:3]
Verify:AttributeWithDuplicate: map[alpha:2 charlie:3]
2 [DurationString] slog.Duration() logs a string representation instead of nanoseconds
Verify:GroupDuration: 8h3m22s
{"time":"2024-09-15T01:31:56.402693313Z","level":"INFO","message":"This is a message","outer":"8h3m22s","group":{"inner":"8h3m22s"}}
Verify:LogAttributes: 1m0s
{"time":"2024-09-15T01:31:56.403460723Z","level":"INFO","message":"This is a message","when":"2024-09-15T01:31:56.403457737Z","howLong":"1m0s","goober":"snoofus","boolean":true,"pi":3.141592653589793,"skidoo":23,"minus":-64,"unsigned":79,"any":["alpha","omega"]}
4 [NoEmptyName] Attributes with empty names are not logged
Verify:AttributeEmptyName
{"time":"2024-09-15T01:31:56.400760857Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributeWithEmptyName
{"time":"2024-09-15T01:31:56.401009073Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributesNotEmpty
{"time":"2024-09-15T01:31:56.401263771Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793}
Verify:AttributesWithNotEmpty
{"time":"2024-09-15T01:31:56.401440713Z","level":"INFO","message":"This is a message","first":"one","second":2,"pi":3.141592653589793}
Warnings for veqryn/dedup/Append:
Administrative
3 [SkipDedup] Test depends on dedup order
Verify:AttributeDuplicate: Skipping test
Verify:AttributeWithDuplicate: Skipping test
Verify:ComplexCases: Skipping test
3 [SkippingTest] Skipping test
Verify:AttributeDuplicate: SkipDedup
Verify:AttributeWithDuplicate: SkipDedup
Verify:ComplexCases: SkipDedup
Warnings for veqryn/dedup/Ignore:
Administrative
3 [SkipDedup] Test depends on dedup order
Verify:AttributeDuplicate: Skipping test
Verify:AttributeWithDuplicate: Skipping test
Verify:ComplexCases: Skipping test
3 [SkippingTest] Skipping test
Verify:AttributeDuplicate: SkipDedup
Verify:AttributeWithDuplicate: SkipDedup
Verify:ComplexCases: SkipDedup
Warnings for veqryn/dedup/Increment:
Administrative
3 [SkipDedup] Test depends on dedup order
Verify:AttributeDuplicate: Skipping test
Verify:AttributeWithDuplicate: Skipping test
Verify:ComplexCases: Skipping test
3 [SkippingTest] Skipping test
Verify:AttributeDuplicate: SkipDedup
Verify:AttributeWithDuplicate: SkipDedup
Verify:ComplexCases: SkipDedup
Warnings for veqryn/dedup/Overwrite: