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

时间:2016-09-24 15:03:27

标签: logging go openshift

我已经使用Go 1.5.2盒式磁带在Openshift上部署了我的Go应用程序。作为一种很好的做法,我习惯于生成有关应用程序中的任何内容的日志。但由于提供给我的存储空间有限(1 GB),这种习惯在Openshift环境中证明是昂贵的。在几秒钟的使用期间,日志很容易超过10 MB标记,如果我不保留日志文件,我担心我的应用程序将耗尽空间。目前,我定期间隔手动清除日志文件。

有什么方法可以阻止将日志附加到文件上,或者可以完全停止生成日志(不影响我原来的应用程序代码)?我试过通过从文件中撤消写权限,但是日志仍然会出现。

1 个答案:

答案 0 :(得分:2)

理想情况下,您可能希望使用便于日志级别的记录器。这将允许您根据当前运行时上下文调整日志的详细程度。您可以查看How to implement level based logging in golang问题,获取大量信息和包以便于日志级别。作为开发人员,您可以包含INFO和DEBUG日志记录语句,当使用较低的日志级别进行部署时,它们将不会包含在您的日志记录输出中。

如果您需要在当前实现中禁用日志记录,则可以使用Logger函数配置本机go SetOutput(output io.Writer)输出编写器。 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中的此代码中查看此操作。这样可以防止您的文件空间填满日志,但是您将丢失所有日志,这对任何应用程序都是不可取的。