Golang标准库log模块是否支持日志轮转
Golang标准库log模块是否支持日志轮转 大家好,
我正在尝试使用标准日志模块将日志条目保存到文件中。
- 它支持日志轮转吗?例如:mylog1.txt、mylog2.txt、mylog3.txt……,每个文件大小为10M。在我的代码片段中,它写入的是单个日志文件,并且该文件已经达到3.1G了。
- 它支持日志级别吗?例如:log.info、log.error……?
谢谢
package main
import (
"log"
"os"
)
func main() {
var logfilename = "/Users/ljh/Documents/helloGo/mylog.txt"
log.SetFlags(log.LstdFlags | log.Lshortfile)
var logfile, err = os.OpenFile(logfilename, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("OpenFile: %v", err)
}
defer logfile.Close()
log.SetOutput(logfile)
// for {
log.Println("Hello World")
//...
//}
}
更多关于Golang标准库log模块是否支持日志轮转的实战教程也可以访问 https://www.itying.com/category-94-b0.html
4 回复
Glog 似乎不支持 JSON 日志记录。
更多关于Golang标准库log模块是否支持日志轮转的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
感谢诺伯特,
与位于 Go 语言目录下的 glog 相比,zap 表现如何?
标准库的 log 模块不支持日志轮转和日志级别。它是一个轻量级的日志记录器,主要提供基本的日志功能。
对于日志轮转,你需要使用第三方库或自己实现。以下是使用 lumberjack 库实现日志轮转的示例:
package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
log.SetOutput(&lumberjack.Logger{
Filename: "/Users/ljh/Documents/helloGo/mylog.txt",
MaxSize: 10, // 文件最大大小(MB)
MaxBackups: 3, // 保留的旧文件最大数量
MaxAge: 28, // 保留旧文件的最大天数
Compress: true, // 是否压缩旧文件
})
log.Println("Hello World")
}
对于日志级别,标准库 log 不直接支持。你可以使用 log.Printf 配合前缀来模拟:
package main
import (
"log"
"os"
)
const (
LevelInfo = "INFO"
LevelError = "ERROR"
)
func main() {
log.SetOutput(os.Stdout)
log.SetFlags(log.LstdFlags)
log.Printf("[%s] %s", LevelInfo, "This is an info message")
log.Printf("[%s] %s", LevelError, "This is an error message")
}
或者使用更完整的日志库如 logrus:
package main
import (
"github.com/sirupsen/logrus"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
logger := logrus.New()
logger.SetOutput(&lumberjack.Logger{
Filename: "/Users/ljh/Documents/helloGo/mylog.txt",
MaxSize: 10,
MaxBackups: 3,
MaxAge: 28,
Compress: true,
})
logger.Info("This is an info message")
logger.Error("This is an error message")
}
logrus 提供了完整的日志级别(Debug、Info、Warn、Error、Fatal、Panic)和结构化日志支持。

