我已经使用Go 1.5.2盒式磁带在Openshift上部署了我的Go应用程序。作为一种很好的做法,我习惯于生成有关应用程序中的任何内容的日志。但由于提供给我的存储空间有限(1 GB),这种习惯在Openshift环境中证明是昂贵的。在几秒钟的使用期间,日志很容易超过10 MB标记,如果我不保留日志文件,我担心我的应用程序将耗尽空间。目前,我定期间隔手动清除日志文件。
有什么方法可以阻止将日志附加到文件上,或者可以完全停止生成日志(不影响我原来的应用程序代码)?我试过通过从文件中撤消写权限,但是日志仍然会出现。
答案 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中的此代码中查看此操作。这样可以防止您的文件空间填满日志,但是您将丢失所有日志,这对任何应用程序都是不可取的。