Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

funcr: Add LogInfoLevel Option to skip logging level in the info log #240

Merged
merged 2 commits into from
Dec 19, 2023

Conversation

spacewander
Copy link
Contributor

@spacewander spacewander commented Dec 1, 2023

Fix #239

Benchmark before:

goos: darwin
goarch: arm64
pkg: github.com/go-logr/logr/benchmark
BenchmarkDiscardLogInfoOneArg-10              	58466427	       21.36 ns/op	     32 B/op	      1 allocs/op
BenchmarkDiscardLogInfoSeveralArgs-10         	24470527	       49.62 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogInfoWithValues-10          	21938677	       47.06 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV0Info-10                  	24796845	       47.45 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV9Info-10                  	26069977	       49.02 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogError-10                   	23731986	       47.94 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardWithValues-10                 	50995291	       22.28 ns/op	     64 B/op	      1 allocs/op
BenchmarkDiscardWithName-10                   	1000000000	        0.4716 ns/op	      0 B/op	      0 allocs/op
BenchmarkFuncrLogInfoOneArg-10                	2684097	      433.9 ns/op	   1152 B/op	      7 allocs/op
BenchmarkFuncrJSONLogInfoOneArg-10            	2413437	      480.4 ns/op	   1168 B/op	      8 allocs/op
BenchmarkFuncrLogInfoSeveralArgs-10           	1261210	      953.2 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoSeveralArgs-10       	1000000	     1003 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogInfoWithValues-10            	1247379	     1027 ns/op	   1480 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoWithValues-10        	1000000	     1109 ns/op	   1496 B/op	     18 allocs/op
BenchmarkFuncrLogV0Info-10                    	1000000	     1043 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogV0Info-10                	1000000	     1100 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogV9Info-10                    	24429925	       48.76 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrJSONLogV9Info-10                	24799878	       53.82 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrLogError-10                     	1000000	     1010 ns/op	   1480 B/op	     19 allocs/op
BenchmarkFuncrJSONLogError-10                 	1000000	     1124 ns/op	   1496 B/op	     20 allocs/op
BenchmarkFuncrWithValues-10                   	4088592	      296.0 ns/op	    264 B/op	      8 allocs/op
BenchmarkFuncrWithName-10                     	34046577	       32.95 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrWithCallDepth-10                	34601535	       32.77 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrJSONLogInfoStringerValue-10     	2062101	      562.0 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoErrorValue-10        	2278339	      529.9 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoMarshalerValue-10    	2108040	      533.6 ns/op	   1200 B/op	     10 allocs/op

Benchmark after:

goos: darwin
goarch: arm64
pkg: github.com/go-logr/logr/benchmark
BenchmarkDiscardLogInfoOneArg-10              	59617632	       20.01 ns/op	     32 B/op	      1 allocs/op
BenchmarkDiscardLogInfoSeveralArgs-10         	26171325	       47.09 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogInfoWithValues-10          	25975759	       45.76 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV0Info-10                  	25654935	       46.02 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV9Info-10                  	25722668	       46.00 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogError-10                   	25181846	       45.97 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardWithValues-10                 	53340940	       21.92 ns/op	     64 B/op	      1 allocs/op
BenchmarkDiscardWithName-10                   	1000000000	        0.4757 ns/op	      0 B/op	      0 allocs/op
BenchmarkFuncrLogInfoOneArg-10                	2887884	      416.5 ns/op	   1152 B/op	      7 allocs/op
BenchmarkFuncrJSONLogInfoOneArg-10            	2556847	      474.0 ns/op	   1168 B/op	      8 allocs/op
BenchmarkFuncrLogInfoSeveralArgs-10           	1280838	      957.4 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoSeveralArgs-10       	1000000	     1003 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogInfoWithValues-10            	1241484	      967.6 ns/op	   1480 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoWithValues-10        	1000000	     1021 ns/op	   1496 B/op	     18 allocs/op
BenchmarkFuncrLogV0Info-10                    	1202900	      925.3 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogV0Info-10                	1000000	     1021 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogV9Info-10                    	24424683	       48.45 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrJSONLogV9Info-10                	24633237	       48.23 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrLogError-10                     	1000000	     1066 ns/op	   1480 B/op	     19 allocs/op
BenchmarkFuncrJSONLogError-10                 	1072557	     1093 ns/op	   1496 B/op	     20 allocs/op
BenchmarkFuncrWithValues-10                   	4094355	      292.9 ns/op	    264 B/op	      8 allocs/op
BenchmarkFuncrWithName-10                     	36661557	       33.96 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrWithCallDepth-10                	32008606	       32.65 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrJSONLogInfoStringerValue-10     	2329975	      517.9 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoErrorValue-10        	2200308	      522.0 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoMarshalerValue-10    	2242267	      536.0 ns/op	   1200 B/op	     10 allocs/op

The performance is similar. Only a nil pointer check is added in the main path.

Benchmark before:
```
goos: darwin
goarch: arm64
pkg: github.com/go-logr/logr/benchmark
BenchmarkDiscardLogInfoOneArg-10              	58466427	       21.36 ns/op	     32 B/op	      1 allocs/op
BenchmarkDiscardLogInfoSeveralArgs-10         	24470527	       49.62 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogInfoWithValues-10          	21938677	       47.06 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV0Info-10                  	24796845	       47.45 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV9Info-10                  	26069977	       49.02 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogError-10                   	23731986	       47.94 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardWithValues-10                 	50995291	       22.28 ns/op	     64 B/op	      1 allocs/op
BenchmarkDiscardWithName-10                   	1000000000	        0.4716 ns/op	      0 B/op	      0 allocs/op
BenchmarkFuncrLogInfoOneArg-10                	2684097	      433.9 ns/op	   1152 B/op	      7 allocs/op
BenchmarkFuncrJSONLogInfoOneArg-10            	2413437	      480.4 ns/op	   1168 B/op	      8 allocs/op
BenchmarkFuncrLogInfoSeveralArgs-10           	1261210	      953.2 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoSeveralArgs-10       	1000000	     1003 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogInfoWithValues-10            	1247379	     1027 ns/op	   1480 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoWithValues-10        	1000000	     1109 ns/op	   1496 B/op	     18 allocs/op
BenchmarkFuncrLogV0Info-10                    	1000000	     1043 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogV0Info-10                	1000000	     1100 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogV9Info-10                    	24429925	       48.76 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrJSONLogV9Info-10                	24799878	       53.82 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrLogError-10                     	1000000	     1010 ns/op	   1480 B/op	     19 allocs/op
BenchmarkFuncrJSONLogError-10                 	1000000	     1124 ns/op	   1496 B/op	     20 allocs/op
BenchmarkFuncrWithValues-10                   	4088592	      296.0 ns/op	    264 B/op	      8 allocs/op
BenchmarkFuncrWithName-10                     	34046577	       32.95 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrWithCallDepth-10                	34601535	       32.77 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrJSONLogInfoStringerValue-10     	2062101	      562.0 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoErrorValue-10        	2278339	      529.9 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoMarshalerValue-10    	2108040	      533.6 ns/op	   1200 B/op	     10 allocs/op
```

Benchmark after:
```
goos: darwin
goarch: arm64
pkg: github.com/go-logr/logr/benchmark
BenchmarkDiscardLogInfoOneArg-10              	59617632	       20.01 ns/op	     32 B/op	      1 allocs/op
BenchmarkDiscardLogInfoSeveralArgs-10         	26171325	       47.09 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogInfoWithValues-10          	25975759	       45.76 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV0Info-10                  	25654935	       46.02 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogV9Info-10                  	25722668	       46.00 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardLogError-10                   	25181846	       45.97 ns/op	    176 B/op	      2 allocs/op
BenchmarkDiscardWithValues-10                 	53340940	       21.92 ns/op	     64 B/op	      1 allocs/op
BenchmarkDiscardWithName-10                   	1000000000	        0.4757 ns/op	      0 B/op	      0 allocs/op
BenchmarkFuncrLogInfoOneArg-10                	2887884	      416.5 ns/op	   1152 B/op	      7 allocs/op
BenchmarkFuncrJSONLogInfoOneArg-10            	2556847	      474.0 ns/op	   1168 B/op	      8 allocs/op
BenchmarkFuncrLogInfoSeveralArgs-10           	1280838	      957.4 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoSeveralArgs-10       	1000000	     1003 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogInfoWithValues-10            	1241484	      967.6 ns/op	   1480 B/op	     17 allocs/op
BenchmarkFuncrJSONLogInfoWithValues-10        	1000000	     1021 ns/op	   1496 B/op	     18 allocs/op
BenchmarkFuncrLogV0Info-10                    	1202900	      925.3 ns/op	   1448 B/op	     17 allocs/op
BenchmarkFuncrJSONLogV0Info-10                	1000000	     1021 ns/op	   1448 B/op	     18 allocs/op
BenchmarkFuncrLogV9Info-10                    	24424683	       48.45 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrJSONLogV9Info-10                	24633237	       48.23 ns/op	    176 B/op	      2 allocs/op
BenchmarkFuncrLogError-10                     	1000000	     1066 ns/op	   1480 B/op	     19 allocs/op
BenchmarkFuncrJSONLogError-10                 	1072557	     1093 ns/op	   1496 B/op	     20 allocs/op
BenchmarkFuncrWithValues-10                   	4094355	      292.9 ns/op	    264 B/op	      8 allocs/op
BenchmarkFuncrWithName-10                     	36661557	       33.96 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrWithCallDepth-10                	32008606	       32.65 ns/op	     96 B/op	      1 allocs/op
BenchmarkFuncrJSONLogInfoStringerValue-10     	2329975	      517.9 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoErrorValue-10        	2200308	      522.0 ns/op	   1200 B/op	     10 allocs/op
BenchmarkFuncrJSONLogInfoMarshalerValue-10    	2242267	      536.0 ns/op	   1200 B/op	     10 allocs/op
```

The performance is similar. Only a nil pointer check is added in the main path.

Signed-off-by: spacewander <spacewanderlzx@gmail.com>
@spacewander spacewander marked this pull request as ready for review December 1, 2023 03:00
@spacewander
Copy link
Contributor Author

@pohly and @thockin : Would you take a look at this PR? Thanks!

funcr/funcr.go Outdated Show resolved Hide resolved
funcr/funcr.go Outdated Show resolved Hide resolved
funcr/funcr.go Outdated Show resolved Hide resolved
funcr/funcr_test.go Show resolved Hide resolved
Signed-off-by: spacewander <spacewanderlzx@gmail.com>
@spacewander
Copy link
Contributor Author

@thockin
Thanks for your suggestion!

@thockin thockin merged commit 5d88f52 into go-logr:master Dec 19, 2023
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

funcr Feature Request: Add LogInfoLevel Option to skip logging level in the info log
3 participants