一尘不染

如何禁用日志记录器

go

我有一些使用该log软件包的工具化代码。现在该关闭日志记录了,我无法确定如何关闭标准记录器。

我错过了什么吗?我应该在进行日志调用之前检查标志,还是在生产中将其注释掉?


阅读 308

收藏
2020-07-02

共1个答案

一尘不染

要完全禁用日志,最好调用log.SetFlags(0)Joril并将输出设置为无操作io.Writer(例如log.SetOutput(ioutil.Discard)

但即使在此之后,操作仍将闲置约500-600 ns / op 1

这仍然可切断短路(左右 为100 ns / OP )通过使用自定义Logger的实现,并实现所有功能进行任何操作-
这表现在这里(只覆盖Println了bervity)。

所有这些的替代方法是使用具有级别的自定义日志记录框架,并将其设置为OFF。

但是请注意,常用的日志记录库之一(logrus会对性能产生影响 -在基准测试中,它的性能均达到 3K + ns / op ,无论如何。

偏见的意见:从基准,图书馆 去,记录在参数与自定义执行Logger执行设定时,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上测试

2020-07-02