我有一些使用该log软件包的工具化代码。现在该关闭日志记录了,我无法确定如何关闭标准记录器。
log
我错过了什么吗?我应该在进行日志调用之前检查标志,还是在生产中将其注释掉?
要完全禁用日志,最好调用log.SetFlags(0)Joril并将输出设置为无操作io.Writer(例如log.SetOutput(ioutil.Discard))
log.SetFlags(0)
io.Writer
log.SetOutput(ioutil.Discard)
但即使在此之后,操作仍将闲置约500-600 ns / op 1
这仍然可切断短路(左右 为100 ns / OP )通过使用自定义Logger的实现,并实现所有功能进行任何操作- 这表现在这里(只覆盖Println了bervity)。
Logger
Println
所有这些的替代方法是使用具有级别的自定义日志记录框架,并将其设置为OFF。
但是请注意,常用的日志记录库之一(logrus)会对性能产生影响 -在基准测试中,它的性能均达到 3K + ns / op ,无论如何。
偏见的意见:从基准,图书馆 去,记录在参数与自定义执行Logger执行设定时,Level到-1,无论后端和格式
Level
-1
(可以在此处找到基准源)
基准的输出如下:
testing: warning: no tests to run PASS BenchmarkGoLogging-4 1000000 2068 ns/op BenchmarkGoLoggingNullBackend-4 5000000 308 ns/op BenchmarkGoLoggingNullBackendWithFancyFormatter-4 3000000 435 ns/op BenchmarkGoLoggingOffLevel-4 20000000 109 ns/op BenchmarkGoLoggingNullBackendAndOffLevel-4 20000000 108 ns/op BenchmarkGoLoggingNullBackendWithFancyFormatterAndOffLevel-4 20000000 109 ns/op BenchmarkLog15-4 200000 7359 ns/op BenchmarkLog15WithDiscardHandler-4 2000000 922 ns/op BenchmarkLog15WithDiscardHandlerAndOffLevel-4 2000000 926 ns/op BenchmarkLog15WithNopLogger-4 20000000 108 ns/op BenchmarkLog15WithNopLoggerDiscardHandlerA-4 20000000 112 ns/op BenchmarkLog15WithNopLoggerAndDiscardHandlerAndOffLevel-4 20000000 112 ns/op BenchmarkLog-4 1000000 1217 ns/op BenchmarkLogIoDiscardWriter-4 2000000 724 ns/op BenchmarkLogIoDiscardWriterWithoutFlags-4 3000000 543 ns/op BenchmarkLogCustomNullWriter-4 2000000 731 ns/op BenchmarkLogCustomNullWriterWithoutFlags-4 3000000 549 ns/op BenchmarkNopLogger-4 20000000 113 ns/op BenchmarkNopLoggerWithoutFlags-4 20000000 112 ns/op BenchmarkLogrus-4 300000 3832 ns/op BenchmarkLogrusWithDiscardWriter-4 500000 3032 ns/op BenchmarkLogrusWithNullFormatter-4 500000 3814 ns/op BenchmarkLogrusWithPanicLevel-4 500000 3872 ns/op BenchmarkLogrusWithDiscardWriterAndPanicLevel-4 500000 3085 ns/op BenchmarkLogrusWithDiscardWriterAndNullFormatterAndPanicLevel-4 500000 3064 ns/op ok log-benchmarks 51.378s go test -bench . 62.17s user 3.90s system 126% cpu 52.065 total
#1: YMMV ,在i7-4500U CPU @ 1.80GHz上测试