Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 在GO中滚动日志文件的最佳方法_Logging_Go - Fatal编程技术网

Logging 在GO中滚动日志文件的最佳方法

Logging 在GO中滚动日志文件的最佳方法,logging,go,Logging,Go,在生产中使用go语言的人是否面临日志文件滚动的问题 是否有可能安全地滚动日志文件线程 有什么框架可以做到这一点吗 谢谢。我通常不直接使用日志文件。要么你写信给网络记录器,比如scribe或kafka等;或者,最好是向stdout/stderr写入,让服务运行程序处理写入日志文件、转发到网络记录器或旋转文件的操作。我倾向于采用记录std error的方法,并让其他方法处理旋转 然后,让系统为您旋转日志,正如前面提到的,这里有一个内部解决方案。您可以考虑使用一个单独的GOODUTE负责日志记录和日志

在生产中使用go语言的人是否面临日志文件滚动的问题

是否有可能安全地滚动日志文件线程

有什么框架可以做到这一点吗


谢谢。

我通常不直接使用日志文件。要么你写信给网络记录器,比如scribe或kafka等;或者,最好是向stdout/stderr写入,让服务运行程序处理写入日志文件、转发到网络记录器或旋转文件的操作。

我倾向于采用记录std error的方法,并让其他方法处理旋转


然后,让系统为您旋转日志,正如前面提到的,这里有一个内部解决方案。您可以考虑使用一个单独的GOODUTE负责日志记录和日志旋转,其中一个通道接收来自其他GOOTRONE的日志。每当轮换时,goroutine将轮换日志,而来自其他goroutine的传入日志将在通道上排队。日志旋转完成后,它将退出通道上的任何内容并继续日志记录

大致如下:

type Log struct {

    log string
    // other info you might want
}

// This will be your goroutine
func Logging(LogChannel chan Log) {

    // assume logger creates/opens a file and prepares it for writing  
    logger := New(logger) 

    for {

        // collect a log. Will also block until a log is available on the channel
        log <- LogChannel

        if timeToRotate() {

            RotateLogFile(logger)

        }

        // write log 
        logger.Log(log)
    }
}
类型日志结构{
日志串
//您可能需要的其他信息
}
//这将是你的欢乐之旅
func日志记录(LogChannel chan日志){
//假设记录器创建/打开一个文件并准备写入
记录器:=新的(记录器)
为了{
//收集日志。还将阻止,直到通道上有可用的日志

log我已经在golang的标准和内存高效的“log”pkg上获得了很好的成功,它的轻量级和背驮

使用非常简单,只需添加一行代码进行设置,并正常使用日志:

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/foo.log",
    MaxSize:    500, // megabytes
    MaxBackups: 3,
    MaxAge:     28, //days
})

@evanmcdonnal我对真实的用户体验很感兴趣。我猜人们在成千上万的日志文件中也面临着同样的问题。你能推荐准确的实现吗?这看起来是完美的解决方案!绝对同意。当你有15个以上的项目在运行时,有几十个(或100个)项目在运行对于每个实例,您希望将其所有输出都输出到stdout/stderr进行日志记录但需要卸载日志记录。例如,将其流式传输到AWS的CloudWatch日志服务,您可以在其中筛选、分组和设置警报。我也曾在小型一次性项目中使用过此功能。但对于任何大规模部署,请避免记录到磁盘,转到stdout/stderr,让基础结构处理大规模日志记录。您使用哪种服务运行程序你推荐这个吗?