我已经使用Go 1.5.2墨盒在Openshift上部署了我的Go应用程序。作为一种良好的实践,我已经养成了为应用程序发生的任何事情生成日志的习惯。但事实证明,这种习惯在Openshift环境中代价高昂,因为提供给我的存储空间有限(1 GB)。日志在使用的几秒钟内就很容易超过10 MB,如果我不管理日志文件,我担心应用程序会耗尽空间。当前,我正在定期手动清理日志文件。
是否有任何方法可以停止将日志追加到文件中,或者完全停止生成日志(而不影响我的原始应用程序代码)?我已经尝试从文件中撤销写权限,但日志一直出现。
理想情况下,您会希望使用一个能够简化日志级别的日志记录器。这将允许您根据当前运行时上下文调整日志的详细程度。您可以查看如何在golang问题中实现基于级别的日志记录,以获得丰富的信息和包来简化日志级别。作为一名开发人员,您可以包括INFO和DEBUG日志语句,当使用较低的日志级别部署时,这些语句将不包括在日志输出中。
如果在紧急情况下需要禁用当前实现中的日志记录,您可以使用SetOutput(output io.Writer)函数配置本机go Logger
输出写入器。log
包使用的默认Writer是STDERR。ioutil
包提供了一个顶级的Discard
Writer,您可以使用它来防止日志记录器写入任何内容。您必须更新应用程序初始化,以便根据环境设置日志记录器的输出。
package main
import (
"fmt"
"io/ioutil"
"log"
)
func main() {
var shouldEnableLogging bool = false
if !shouldEnableLogging {
fmt.Println("Disabled logging")
log.SetOutput(ioutil.Discard)
}
for i := 0; i < 5; i++ {
log.Printf("I logging statement %d", i)
}
}
您可以在这段代码片段中调整bool标志,以便在Go Playground中的这段代码中看到它的作用。这将防止您的文件空间被日志填满,但您将丢失所有日志,这对于任何应用程序都是不可取的。