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 ║ 792,762 │ 1,440.00 │ 5 │ 416 │ 270.19 ║ ║ madkins/flash ║ 813,104 │ 1,362.00 │ 5 │ 504 │ 328.20 ║ ║ madkins/replattr ║ 576,532 │ 2,029.00 │ 6 │ 508 │ 220.27 ║ ║ madkins/sloggy ║ 427,345 │ 2,826.00 │ 64 │ 1,384 │ 158.55 ║ ║ phsym/zeroslog ║ 1,202,805 │ 1,001.00 │ 3 │ 352 │ 395.58 ║ ║ phuslu/slog ║ 1,328,202 │ 883.60 │ 1 │ 240 │ 488.90 ║ ║ samber/slog-logrus ║ 65,823 │ 17,797.00 │ 94 │ 9,079 │ 22.87 ║ ║ samber/slog-zap ║ 210,345 │ 6,138.00 │ 50 │ 7,223 │ 63.38 ║ ║ samber/slog-zerolog ║ 216,938 │ 5,288.00 │ 60 │ 5,582 │ 74.89 ║ ║ slog/JSONHandler ║ 803,263 │ 1,502.00 │ 6 │ 472 │ 277.59 ║ ║ snqk/meld ║ 438,716 │ 2,552.00 │ 31 │ 2,186 │ 163.38 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,059.00 │ 3 │ 280 │ 392.75 ║ ║ veqryn/dedup/Append ║ 168,424 │ 6,042.00 │ 41 │ 9,721 │ 69.01 ║ ║ veqryn/dedup/Ignore ║ 181,042 │ 6,071.00 │ 41 │ 9,721 │ 68.69 ║ ║ veqryn/dedup/Increment ║ 160,406 │ 6,368.00 │ 41 │ 9,729 │ 65.48 ║ ║ veqryn/dedup/Overwrite ║ 178,592 │ 6,048.00 │ 41 │ 9,722 │ 68.95 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Big Group ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 51,025 │ 23,697.00 │ 215 │ 5,214 │ 444.16 ║ ║ madkins/flash ║ 35,166 │ 34,488.00 │ 12 │ 45,359 │ 348.85 ║ ║ madkins/replattr ║ 18,610 │ 62,888.00 │ 13 │ 45,360 │ 191.31 ║ ║ madkins/sloggy ║ 17,518 │ 68,957.00 │ 2,358 │ 25,120 │ 174.48 ║ ║ phsym/zeroslog ║ 76,651 │ 16,221.00 │ 1 │ 48 │ 649.10 ║ ║ phuslu/slog ║ 111,912 │ 10,797.00 │ 1 │ 48 │ 975.70 ║ ║ samber/slog-logrus ║ 3,158 │ 371,154.00 │ 4,024 │ 251,921 │ 28.36 ║ ║ samber/slog-zap ║ 4,429 │ 270,907.00 │ 4,001 │ 252,209 │ 38.85 ║ ║ samber/slog-zerolog ║ 4,422 │ 275,299.00 │ 4,001 │ 263,418 │ 38.25 ║ ║ slog/JSONHandler ║ 51,270 │ 23,819.00 │ 1 │ 48 │ 442.28 ║ ║ snqk/meld ║ 12,470 │ 99,223.00 │ 1,973 │ 98,816 │ 106.16 ║ ║ svcrunner/jsonlog ║ 34,441 │ 35,892.00 │ 14 │ 56,137 │ 293.63 ║ ║ veqryn/dedup/Append ║ 2,942 │ 398,169.00 │ 2,783 │ 890,292 │ 26.46 ║ ║ veqryn/dedup/Ignore ║ 2,373 │ 422,996.00 │ 2,783 │ 891,053 │ 24.91 ║ ║ veqryn/dedup/Increment ║ 2,330 │ 437,938.00 │ 2,944 │ 914,280 │ 24.05 ║ ║ veqryn/dedup/Overwrite ║ 2,521 │ 409,270.00 │ 2,783 │ 890,609 │ 25.74 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Disabled ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 41,174,551 │ 29.07 │ 0 │ 0 │ 0.00 ║ ║ madkins/flash ║ 319,933,057 │ 3.75 │ 0 │ 0 │ 0.00 ║ ║ madkins/replattr ║ 318,953,740 │ 7.65 │ 0 │ 0 │ 0.00 ║ ║ madkins/sloggy ║ 320,593,141 │ 3.75 │ 0 │ 0 │ 0.00 ║ ║ phsym/zeroslog ║ 319,660,309 │ 3.77 │ 0 │ 0 │ 0.00 ║ ║ phuslu/slog ║ 404,661,037 │ 3.00 │ 0 │ 0 │ 0.00 ║ ║ samber/slog-logrus ║ 319,968,763 │ 3.75 │ 0 │ 0 │ 0.00 ║ ║ samber/slog-zap ║ 319,758,386 │ 3.75 │ 0 │ 0 │ 0.00 ║ ║ samber/slog-zerolog ║ 320,353,143 │ 3.75 │ 0 │ 0 │ 0.00 ║ ║ slog/JSONHandler ║ 307,638,812 │ 3.99 │ 0 │ 0 │ 0.00 ║ ║ snqk/meld ║ 265,251,296 │ 4.53 │ 0 │ 0 │ 0.00 ║ ║ svcrunner/jsonlog ║ 404,765,176 │ 2.97 │ 0 │ 0 │ 0.00 ║ ║ veqryn/dedup/Append ║ 262,570,900 │ 4.53 │ 0 │ 0 │ 0.00 ║ ║ veqryn/dedup/Ignore ║ 264,523,258 │ 4.57 │ 0 │ 0 │ 0.00 ║ ║ veqryn/dedup/Increment ║ 264,934,015 │ 4.53 │ 0 │ 0 │ 0.00 ║ ║ veqryn/dedup/Overwrite ║ 265,213,424 │ 4.55 │ 0 │ 0 │ 0.00 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Key Values ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 756,090 │ 1,507.00 │ 5 │ 417 │ 258.15 ║ ║ madkins/flash ║ 847,036 │ 1,418.00 │ 5 │ 504 │ 315.18 ║ ║ madkins/replattr ║ 560,954 │ 2,070.00 │ 6 │ 508 │ 215.97 ║ ║ madkins/sloggy ║ 416,635 │ 2,863.00 │ 64 │ 1,384 │ 156.14 ║ ║ phsym/zeroslog ║ 1,000,000 │ 1,035.00 │ 3 │ 352 │ 382.51 ║ ║ phuslu/slog ║ 1,291,179 │ 944.20 │ 1 │ 240 │ 457.53 ║ ║ samber/slog-logrus ║ 67,507 │ 17,759.00 │ 94 │ 9,079 │ 22.92 ║ ║ samber/slog-zap ║ 186,898 │ 6,201.00 │ 50 │ 7,224 │ 62.73 ║ ║ samber/slog-zerolog ║ 221,190 │ 5,371.00 │ 60 │ 5,582 │ 73.73 ║ ║ slog/JSONHandler ║ 778,650 │ 1,530.00 │ 6 │ 472 │ 272.62 ║ ║ snqk/meld ║ 479,914 │ 2,659.00 │ 31 │ 2,186 │ 156.80 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,089.00 │ 3 │ 280 │ 382.01 ║ ║ veqryn/dedup/Append ║ 169,804 │ 5,977.00 │ 41 │ 9,724 │ 69.77 ║ ║ veqryn/dedup/Ignore ║ 169,578 │ 6,076.00 │ 41 │ 9,724 │ 68.63 ║ ║ veqryn/dedup/Increment ║ 161,138 │ 6,376.00 │ 41 │ 9,728 │ 65.40 ║ ║ veqryn/dedup/Overwrite ║ 175,852 │ 6,021.00 │ 41 │ 9,722 │ 69.25 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Logging ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 39,780 │ 33,850.00 │ 51 │ 1,635 │ 244.96 ║ ║ madkins/flash ║ 35,166 │ 34,246.00 │ 153 │ 11,839 │ 280.55 ║ ║ madkins/replattr ║ 23,190 │ 52,027.00 │ 204 │ 12,043 │ 184.81 ║ ║ madkins/sloggy ║ 17,457 │ 68,537.00 │ 1,865 │ 26,992 │ 140.25 ║ ║ phsym/zeroslog ║ 69,572 │ 17,394.00 │ 0 │ 0 │ 488.44 ║ ║ phuslu/slog ║ 83,864 │ 14,260.00 │ 0 │ 0 │ 617.25 ║ ║ samber/slog-logrus ║ 2,917 │ 403,544.00 │ 2,704 │ 202,592 │ 20.89 ║ ║ samber/slog-zap ║ 10,000 │ 114,341.00 │ 1,071 │ 131,958 │ 72.52 ║ ║ samber/slog-zerolog ║ 14,112 │ 86,631.00 │ 1,173 │ 91,033 │ 98.07 ║ ║ slog/JSONHandler ║ 46,228 │ 27,730.00 │ 0 │ 0 │ 317.28 ║ ║ snqk/meld ║ 24,211 │ 48,508.00 │ 561 │ 30,214 │ 181.37 ║ ║ svcrunner/jsonlog ║ 59,827 │ 20,482.00 │ 0 │ 0 │ 439.46 ║ ║ veqryn/dedup/Append ║ 8,750 │ 135,863.00 │ 867 │ 224,777 │ 64.76 ║ ║ veqryn/dedup/Ignore ║ 7,861 │ 135,937.00 │ 867 │ 224,862 │ 64.71 ║ ║ veqryn/dedup/Increment ║ 8,728 │ 138,331.00 │ 867 │ 224,806 │ 63.59 ║ ║ veqryn/dedup/Overwrite ║ 7,371 │ 139,041.00 │ 867 │ 224,864 │ 63.29 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Simple ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 3,169,288 │ 373.40 │ 1 │ 32 │ 195.52 ║ ║ madkins/flash ║ 2,651,500 │ 453.10 │ 3 │ 232 │ 194.21 ║ ║ madkins/replattr ║ 1,934,299 │ 625.20 │ 4 │ 236 │ 140.75 ║ ║ madkins/sloggy ║ 1,759,131 │ 692.10 │ 14 │ 240 │ 128.60 ║ ║ phsym/zeroslog ║ 6,082,543 │ 199.40 │ 0 │ 0 │ 386.17 ║ ║ phuslu/slog ║ 7,861,970 │ 153.10 │ 0 │ 0 │ 542.24 ║ ║ samber/slog-logrus ║ 355,820 │ 3,242.00 │ 26 │ 1,481 │ 22.52 ║ ║ samber/slog-zap ║ 2,526,602 │ 475.20 │ 2 │ 336 │ 153.63 ║ ║ samber/slog-zerolog ║ 3,217,803 │ 382.30 │ 2 │ 336 │ 201.42 ║ ║ slog/JSONHandler ║ 3,962,881 │ 302.00 │ 0 │ 0 │ 274.86 ║ ║ snqk/meld ║ 3,638,482 │ 327.40 │ 0 │ 0 │ 253.49 ║ ║ svcrunner/jsonlog ║ 4,827,558 │ 242.30 │ 0 │ 0 │ 359.02 ║ ║ veqryn/dedup/Append ║ 2,437,410 │ 499.60 │ 6 │ 280 │ 166.13 ║ ║ veqryn/dedup/Ignore ║ 2,416,216 │ 500.50 │ 6 │ 280 │ 165.84 ║ ║ veqryn/dedup/Increment ║ 2,411,690 │ 500.40 │ 6 │ 280 │ 165.88 ║ ║ veqryn/dedup/Overwrite ║ 2,446,732 │ 504.60 │ 6 │ 280 │ 164.50 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark Simple Source ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 1,968,339 │ 610.80 │ 3 │ 280 │ 175.19 ║ ║ madkins/flash ║ 1,296,170 │ 924.70 │ 7 │ 704 │ 304.96 ║ ║ madkins/replattr ║ 1,000,000 │ 1,151.00 │ 8 │ 712 │ 246.71 ║ ║ madkins/sloggy ║ 646,135 │ 1,756.00 │ 30 │ 1,280 │ 162.31 ║ ║ phsym/zeroslog ║ 2,509,022 │ 476.30 │ 4 │ 312 │ 317.01 ║ ║ phuslu/slog ║ 5,635,213 │ 213.10 │ 0 │ 0 │ 1,135.63 ║ ║ samber/slog-logrus ║ 157,461 │ 7,436.00 │ 63 │ 4,276 │ 35.91 ║ ║ samber/slog-zap ║ 1,643,460 │ 735.10 │ 5 │ 592 │ 145.55 ║ ║ samber/slog-zerolog ║ 476,286 │ 2,564.00 │ 39 │ 2,763 │ 105.71 ║ ║ slog/JSONHandler ║ 1,424,109 │ 865.70 │ 6 │ 568 │ 319.96 ║ ║ snqk/meld ║ 1,363,777 │ 990.90 │ 6 │ 568 │ 279.55 ║ ║ svcrunner/jsonlog ║ 4,799,905 │ 260.40 │ 0 │ 0 │ 330.23 ║ ║ veqryn/dedup/Append ║ 1,000,000 │ 1,090.00 │ 12 │ 848 │ 254.05 ║ ║ veqryn/dedup/Ignore ║ 1,000,000 │ 1,109.00 │ 12 │ 848 │ 249.68 ║ ║ veqryn/dedup/Increment ║ 1,000,000 │ 1,120.00 │ 12 │ 848 │ 247.36 ║ ║ veqryn/dedup/Overwrite ║ 1,000,000 │ 1,115.00 │ 12 │ 848 │ 248.42 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark With Attrs Attributes ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 765,348 │ 1,532.00 │ 5 │ 416 │ 481.21 ║ ║ madkins/flash ║ 845,872 │ 1,385.00 │ 5 │ 504 │ 605.00 ║ ║ madkins/replattr ║ 600,543 │ 2,038.00 │ 6 │ 508 │ 411.17 ║ ║ madkins/sloggy ║ 397,540 │ 2,933.00 │ 64 │ 1,384 │ 286.06 ║ ║ phsym/zeroslog ║ 1,000,000 │ 1,021.00 │ 3 │ 352 │ 731.43 ║ ║ phuslu/slog ║ 1,333,819 │ 896.90 │ 1 │ 240 │ 906.44 ║ ║ samber/slog-logrus ║ 44,931 │ 26,774.00 │ 139 │ 16,437 │ 24.05 ║ ║ samber/slog-zap ║ 109,345 │ 12,163.00 │ 78 │ 14,983 │ 49.99 ║ ║ samber/slog-zerolog ║ 124,011 │ 9,302.00 │ 95 │ 11,308 │ 66.44 ║ ║ slog/JSONHandler ║ 807,038 │ 1,494.00 │ 6 │ 472 │ 523.43 ║ ║ snqk/meld ║ 340,815 │ 3,619.00 │ 38 │ 3,363 │ 180.70 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,085.00 │ 4 │ 288 │ 715.87 ║ ║ veqryn/dedup/Append ║ 96,944 │ 11,417.00 │ 100 │ 16,465 │ 59.47 ║ ║ veqryn/dedup/Ignore ║ 118,314 │ 8,956.00 │ 61 │ 14,069 │ 73.02 ║ ║ veqryn/dedup/Increment ║ 95,857 │ 11,429.00 │ 74 │ 15,323 │ 69.29 ║ ║ veqryn/dedup/Overwrite ║ 120,084 │ 8,889.00 │ 63 │ 14,165 │ 73.58 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark With Attrs Key Values ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 789,968 │ 1,529.00 │ 5 │ 416 │ 482.14 ║ ║ madkins/flash ║ 838,875 │ 1,436.00 │ 5 │ 504 │ 583.56 ║ ║ madkins/replattr ║ 564,667 │ 2,074.00 │ 6 │ 508 │ 403.98 ║ ║ madkins/sloggy ║ 411,616 │ 2,891.00 │ 64 │ 1,384 │ 289.85 ║ ║ phsym/zeroslog ║ 996,313 │ 1,042.00 │ 3 │ 352 │ 716.93 ║ ║ phuslu/slog ║ 1,272,306 │ 949.10 │ 1 │ 240 │ 856.62 ║ ║ samber/slog-logrus ║ 44,371 │ 26,775.00 │ 139 │ 16,435 │ 24.05 ║ ║ samber/slog-zap ║ 106,971 │ 11,254.00 │ 78 │ 14,985 │ 54.03 ║ ║ samber/slog-zerolog ║ 124,344 │ 9,640.00 │ 95 │ 11,307 │ 64.11 ║ ║ slog/JSONHandler ║ 777,950 │ 1,558.00 │ 6 │ 472 │ 502.55 ║ ║ snqk/meld ║ 352,626 │ 3,696.00 │ 38 │ 3,363 │ 176.94 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,118.00 │ 4 │ 288 │ 695.00 ║ ║ veqryn/dedup/Append ║ 94,188 │ 11,414.00 │ 100 │ 16,465 │ 59.49 ║ ║ veqryn/dedup/Ignore ║ 120,589 │ 8,922.00 │ 61 │ 14,070 │ 73.31 ║ ║ veqryn/dedup/Increment ║ 100,866 │ 11,450.00 │ 74 │ 15,321 │ 69.17 ║ ║ veqryn/dedup/Overwrite ║ 122,040 │ 9,170.00 │ 63 │ 14,166 │ 71.21 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark With Attrs Simple ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 3,114,000 │ 384.10 │ 1 │ 32 │ 1,096.03 ║ ║ madkins/flash ║ 2,566,215 │ 460.50 │ 3 │ 232 │ 1,040.11 ║ ║ madkins/replattr ║ 1,897,164 │ 632.10 │ 4 │ 236 │ 757.76 ║ ║ madkins/sloggy ║ 1,716,230 │ 692.30 │ 14 │ 240 │ 693.31 ║ ║ phsym/zeroslog ║ 5,802,163 │ 209.60 │ 0 │ 0 │ 2,042.39 ║ ║ phuslu/slog ║ 7,521,164 │ 159.70 │ 0 │ 0 │ 2,905.31 ║ ║ samber/slog-logrus ║ 67,767 │ 17,645.00 │ 93 │ 8,841 │ 24.88 ║ ║ samber/slog-zap ║ 205,501 │ 5,922.00 │ 49 │ 6,983 │ 71.08 ║ ║ samber/slog-zerolog ║ 239,511 │ 5,049.00 │ 59 │ 5,342 │ 84.77 ║ ║ slog/JSONHandler ║ 3,699,673 │ 299.80 │ 0 │ 0 │ 1,497.58 ║ ║ snqk/meld ║ 669,667 │ 1,766.00 │ 8 │ 1,001 │ 254.27 ║ ║ svcrunner/jsonlog ║ 3,873,990 │ 339.10 │ 1 │ 8 │ 1,320.96 ║ ║ veqryn/dedup/Append ║ 179,883 │ 5,735.00 │ 39 │ 9,049 │ 78.30 ║ ║ veqryn/dedup/Ignore ║ 179,449 │ 5,806.00 │ 39 │ 9,049 │ 77.33 ║ ║ veqryn/dedup/Increment ║ 178,158 │ 6,141.00 │ 39 │ 9,050 │ 72.95 ║ ║ veqryn/dedup/Overwrite ║ 174,152 │ 5,762.00 │ 39 │ 9,044 │ 77.93 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark With Group Attributes ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 781,776 │ 1,535.00 │ 7 │ 505 │ 262.48 ║ ║ madkins/flash ║ 853,068 │ 1,402.00 │ 5 │ 504 │ 329.44 ║ ║ madkins/replattr ║ 581,949 │ 2,038.00 │ 6 │ 508 │ 226.71 ║ ║ madkins/sloggy ║ 379,204 │ 2,839.00 │ 64 │ 1,384 │ 163.06 ║ ║ phsym/zeroslog ║ 1,000,000 │ 1,148.00 │ 4 │ 640 │ 357.11 ║ ║ phuslu/slog ║ 1,321,803 │ 906.30 │ 1 │ 240 │ 492.08 ║ ║ samber/slog-logrus ║ 58,345 │ 20,933.00 │ 168 │ 15,348 │ 18.01 ║ ║ samber/slog-zap ║ 101,349 │ 11,621.00 │ 142 │ 13,737 │ 32.44 ║ ║ samber/slog-zerolog ║ 100,422 │ 11,401.00 │ 144 │ 13,961 │ 33.42 ║ ║ slog/JSONHandler ║ 773,347 │ 1,537.00 │ 6 │ 472 │ 280.37 ║ ║ snqk/meld ║ 437,341 │ 2,678.00 │ 34 │ 2,074 │ 160.97 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,076.00 │ 4 │ 296 │ 399.67 ║ ║ veqryn/dedup/Append ║ 146,115 │ 7,467.00 │ 50 │ 13,270 │ 57.72 ║ ║ veqryn/dedup/Ignore ║ 139,568 │ 7,565.00 │ 50 │ 13,276 │ 56.98 ║ ║ veqryn/dedup/Increment ║ 136,323 │ 7,890.00 │ 50 │ 13,288 │ 54.63 ║ ║ veqryn/dedup/Overwrite ║ 137,160 │ 7,539.00 │ 50 │ 13,275 │ 57.17 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ Benchmark With Group Key Values ╔═════════════════════════╦═════════════╤═══════════════╤═════════════╤═════════════╤═════════════╗ ║ Handler ║ Runs │ Ns/Op │ Allocs/Op │ Bytes/Op │ MB/Sec ║ ╠═════════════════════════╬═════════════╪═══════════════╪═════════════╪═════════════╪═════════════╣ ║ chanchal/zaphandler ║ 703,856 │ 1,584.00 │ 7 │ 505 │ 254.34 ║ ║ madkins/flash ║ 795,336 │ 1,482.00 │ 5 │ 504 │ 311.76 ║ ║ madkins/replattr ║ 569,724 │ 2,080.00 │ 6 │ 508 │ 222.09 ║ ║ madkins/sloggy ║ 399,204 │ 2,983.00 │ 64 │ 1,384 │ 155.21 ║ ║ phsym/zeroslog ║ 964,652 │ 1,189.00 │ 4 │ 640 │ 344.75 ║ ║ phuslu/slog ║ 1,263,070 │ 957.90 │ 1 │ 240 │ 465.58 ║ ║ samber/slog-logrus ║ 46,758 │ 21,407.00 │ 168 │ 15,348 │ 17.61 ║ ║ samber/slog-zap ║ 102,225 │ 11,496.00 │ 142 │ 13,737 │ 32.79 ║ ║ samber/slog-zerolog ║ 104,217 │ 11,509.00 │ 144 │ 13,961 │ 33.11 ║ ║ slog/JSONHandler ║ 785,809 │ 1,567.00 │ 6 │ 472 │ 274.97 ║ ║ snqk/meld ║ 423,217 │ 2,594.00 │ 34 │ 2,074 │ 166.15 ║ ║ svcrunner/jsonlog ║ 1,000,000 │ 1,114.00 │ 4 │ 296 │ 385.85 ║ ║ veqryn/dedup/Append ║ 140,689 │ 7,502.00 │ 50 │ 13,274 │ 57.45 ║ ║ veqryn/dedup/Ignore ║ 145,676 │ 7,452.00 │ 50 │ 13,277 │ 57.83 ║ ║ veqryn/dedup/Increment ║ 133,644 │ 7,960.00 │ 50 │ 13,288 │ 54.15 ║ ║ veqryn/dedup/Overwrite ║ 145,614 │ 7,515.00 │ 50 │ 13,272 │ 57.35 ║ ╚═════════════════════════╩═════════════╧═══════════════╧═════════════╧═════════════╧═════════════╝ 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.12/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.12/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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:36:56Z","caller":"tests/benchmarks.go:96","msg":"This is a message"} Verify:SourceKey: reflect/value.go:596 {"level":"info","time":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","msg":"This is a message","first":"one","second":2,"third":"3","group":{"subGroup":{"fourth":"forth","pi":3.141592653589793}}} Verify:GroupWithMultiSubEmpty {"level":"info","time":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","msg":"This is a message","key":"value","group":{}} 10 [LevelCase] Log level in lowercase 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: 2025-02-16T01:41:19Z 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":"2025-02-16T01:41:19Z","message":"This is a message"} Verify:AttributesEmpty {"level":"info","first":"one","":null,"pi":3.141592653589793,"time":"2025-02-16T01:41:19Z","message":"This is a message"} Verify:AttributesWithEmpty {"level":"info","first":"one","second":2,"":null,"pi":3.141592653589793,"time":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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.12/x64/src/testing/slogtest/slogtest.go:39) unexpected key "": a Handler should ignore an empty Attr (/opt/hostedtoolcache/go/1.22.12/x64/src/testing/slogtest/slogtest.go:61) missing key "c": a Handler should inline the Attrs of a group with an empty key (/opt/hostedtoolcache/go/1.22.12/x64/src/testing/slogtest/slogtest.go:119) missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.12/x64/src/testing/slogtest/slogtest.go:132) missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.12/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.12/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.12/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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:38:24Z","message":"This is a message"} Verify:SourceKey: /opt/hostedtoolcache/go/1.22.12/x64/src/reflect/value.go:596 {"level":"info","caller":"/opt/hostedtoolcache/go/1.22.12/x64/src/reflect/value.go:596","time":"2025-02-16T01:41:19Z","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: 'error' Verify:KeyCase: 'debug' Verify:KeyCase: 'info' Verify:KeyCase: 'warn' Verify:Keys: 'info' Verify:SourceKey: 'info' Verify:ZeroPC: 'info' Verify:ZeroTime: 'info' 1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds Verify:LogAttributes: 2025-02-16T01:41:19Z Administrative 1 [Unused] Unused Warnings(s) Verify:ZeroTime: ZeroTime 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":"2025-02-16T01:41:19Z"} Verify:ResolveGroupWith {"group":{"hidden":{},"pi":3.141592653589793},"level":"info","msg":"This is a message","time":"2025-02-16T01:41:19Z"} Verify:ResolveValuer {"hidden":{},"level":"info","msg":"This is a message","time":"2025-02-16T01:41:19Z"} Verify:ResolveWith {"hidden":{},"level":"info","msg":"This is a message","time":"2025-02-16T01:41:19Z"} 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.12/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.12/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.12/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.12/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.12/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.12/x64/src/testing/slogtest/slogtest.go:207) 1 [ZeroTime] Zero time is logged Verify:ZeroTime: 2025-02-16T01:41:19Z {"level":"info","msg":"This is a message","time":"2025-02-16T01:41:19Z"} 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":"2025-02-16T01:41:19Z"} 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: 'debug' Verify:KeyCase: 'info' Verify:KeyCase: 'error' 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":"2025-02-16T01:41:19Z"} Verify:AttributeWithEmptyName {"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"time":"2025-02-16T01:41:19Z"} Verify:AttributesNotEmpty {"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"time":"2025-02-16T01:41:19Z"} Verify:AttributesWithNotEmpty {"first":"one","level":"info","msg":"This is a message","pi":3.141592653589793,"second":2,"time":"2025-02-16T01:41:19Z"} 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":"2025-02-16T01:41:19Z","msg":"This is a message","group":{"hidden":{},"pi":3.141592653589793}} Verify:ResolveGroupWith {"level":"info","time":"2025-02-16T01:41:19Z","msg":"This is a message","group":{"hidden":{},"pi":3.141592653589793}} Verify:ResolveValuer {"level":"info","time":"2025-02-16T01:41:19Z","msg":"This is a message","hidden":{}} Verify:ResolveWith {"level":"info","time":"2025-02-16T01:41:19Z","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.12/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.12/x64/src/testing/slogtest/slogtest.go:119) "k": got "", want "replaced": a Handler should call Resolve on attribute values (/opt/hostedtoolcache/go/1.22.12/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.12/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.12/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.12/x64/src/testing/slogtest/slogtest.go:207) 1 [ZeroPC] SourceKey logged for zero PC Verify:ZeroPC: non-standard key 'caller' {"level":"info","time":"2025-02-16T01:41:19Z","caller":":0","msg":"This is a message"} 1 [ZeroTime] Zero time is logged Verify:ZeroTime: 2025-02-16T01:41:19Z {"level":"info","time":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:39:17Z","caller":"tests/benchmarks.go:96","msg":"This is a message"} Verify:SourceKey: reflect/value.go:596 {"level":"info","time":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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: '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":"2025-02-16T01:41:19Z","msg":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributeWithEmptyName {"level":"info","time":"2025-02-16T01:41:19Z","msg":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributesNotEmpty {"level":"info","time":"2025-02-16T01:41:19Z","msg":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributesWithNotEmpty {"level":"info","time":"2025-02-16T01:41:19Z","msg":"This is a message","first":"one","second":2,"pi":3.141592653589793} 1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds Verify:LogAttributes: 2025-02-16T01:41:19Z 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":"2025-02-16T01:41:19Z","group":{"hidden":{},"pi":3.141592653589793},"message":"This is a message"} Verify:ResolveGroupWith {"level":"info","time":"2025-02-16T01:41:19Z","group":{"hidden":{},"pi":3.141592653589793},"message":"This is a message"} Verify:ResolveValuer {"level":"info","time":"2025-02-16T01:41:19Z","hidden":{},"message":"This is a message"} Verify:ResolveWith {"level":"info","time":"2025-02-16T01:41:19Z","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.12/x64/src/testing/slogtest/slogtest.go:39) unexpected key "time": a Handler should ignore a zero Record.Time (/opt/hostedtoolcache/go/1.22.12/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.12/x64/src/testing/slogtest/slogtest.go:119) missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.12/x64/src/testing/slogtest/slogtest.go:132) missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.12/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.12/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.12/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.12/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.12/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.12/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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","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":"2025-02-16T01:41:19Z","first":"one","pi":3.141592653589793,"message":"This is a message"} Verify:AttributeWithEmptyName {"level":"info","time":"2025-02-16T01:41:19Z","first":"one","pi":3.141592653589793,"message":"This is a message"} Verify:AttributesNotEmpty {"level":"info","time":"2025-02-16T01:41:19Z","first":"one","pi":3.141592653589793,"message":"This is a message"} Verify:AttributesWithNotEmpty {"level":"info","time":"2025-02-16T01:41:19Z","first":"one","pi":3.141592653589793,"second":2,"message":"This is a message"} 1 [TimeMillis] slog.Time() logs milliseconds instead of nanoseconds Verify:LogAttributes: 2025-02-16T01:41:19Z 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.12/x64/src/testing/slogtest/slogtest.go:39) missing key "msg": a Handler should handle the WithGroup method (/opt/hostedtoolcache/go/1.22.12/x64/src/testing/slogtest/slogtest.go:132) missing key "msg": a Handler should handle multiple WithGroup and WithAttr calls (/opt/hostedtoolcache/go/1.22.12/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.12/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":"2025-02-16T01:41:19.49671943Z","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":"2025-02-16T01:39:50.73380189Z","level":"INFO","message":"This is a message"} Verify:SourceKey: no 'source' key {"time":"2025-02-16T01:41:19.497315904Z","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":"2025-02-16T01:41:19.49527052Z","level":"INFO","message":"This is a message","outer":"8h3m22s","group":{"inner":"8h3m22s"}} Verify:LogAttributes: 1m0s {"time":"2025-02-16T01:41:19.496392184Z","level":"INFO","message":"This is a message","when":"2025-02-16T01:41:19.49638976Z","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":"2025-02-16T01:41:19.493095344Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributeWithEmptyName {"time":"2025-02-16T01:41:19.493399917Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributesNotEmpty {"time":"2025-02-16T01:41:19.493696356Z","level":"INFO","message":"This is a message","first":"one","pi":3.141592653589793} Verify:AttributesWithNotEmpty {"time":"2025-02-16T01:41:19.493899743Z","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: