停止将日志追加到go.log文件中



我已经使用Go 1.5.2墨盒在Openshift上部署了我的Go应用程序。作为一种良好的实践,我已经养成了为应用程序发生的任何事情生成日志的习惯。但事实证明,这种习惯在Openshift环境中代价高昂,因为提供给我的存储空间有限(1 GB)。日志在使用的几秒钟内就很容易超过10 MB,如果我不管理日志文件,我担心应用程序会耗尽空间。当前,我正在定期手动清理日志文件。

是否有任何方法可以停止将日志追加到文件中,或者完全停止生成日志(而不影响我的原始应用程序代码)?我已经尝试从文件中撤销写权限,但日志一直出现。

理想情况下,您会希望使用一个能够简化日志级别的日志记录器。这将允许您根据当前运行时上下文调整日志的详细程度。您可以查看如何在golang问题中实现基于级别的日志记录,以获得丰富的信息和包来简化日志级别。作为一名开发人员,您可以包括INFO和DEBUG日志语句,当使用较低的日志级别部署时,这些语句将不包括在日志输出中。

如果在紧急情况下需要禁用当前实现中的日志记录,您可以使用SetOutput(output io.Writer)函数配置本机go Logger输出写入器。log包使用的默认Writer是STDERRioutil包提供了一个顶级的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中的这段代码中看到它的作用。这将防止您的文件空间被日志填满,但您将丢失所有日志,这对于任何应用程序都是不可取的。

最新更新