Home

Text File tabular.txt

Handlers
Bench Tests
Verify Tests

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: