在Debian上配置Golang日志可按以下步骤进行,可选择标准库或第三方库,结合日志轮转工具实现灵活管理:
log包package main
import (
    "log"
    "os"
)
func main() {
    // 输出到文件
    file, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    log.SetOutput(file) // 或同时输出到控制台:log.SetOutput(io.MultiWriter(os.Stdout, file))
    
    // 设置日志前缀和格式
    log.SetPrefix("[MyApp] ")
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)
    
    log.Println("This is a log message.")
}
log包默认输出到stderr,可通过SetOutput重定向,支持自定义前缀和格式(如日期、文件名)。logrus为例)安装库
go get github.com/sirupsen/logrus
基础配置
package main
import (
    "github.com/sirupsen/logrus"
)
func main() {
    // 设置日志级别和格式
    logrus.SetLevel(logrus.InfoLevel) // 可选:DebugLevel, WarnLevel等
    logrus.SetFormatter(&logrus.JSONFormatter{}) // 或 TextFormatter
    
    // 输出到控制台
    logrus.SetOutput(os.Stdout)
    
    // 记录日志
    logrus.Info("This is an info log.")
    logrus.WithFields(logrus.Fields{
        "animal": "walrus",
        "size":   10,
    }).Info("Detailed log with fields")
}
使用logrotate工具(Debian默认安装):
/etc/logrotate.d/myapp:/path/to/app/*.log {
    daily
    rotate 7
    missingok
    compress
    notifempty
    create 0640 root root
}
sudo systemctl restart logrotate
通过log/syslog包将日志发送到系统日志服务:
import (
    "log"
    "log/syslog"
)
func main() {
    syslog, err := syslog.New(syslog.LOG_INFO|syslog.LOG_USER, "myapp")
    if err != nil {
        log.Fatal(err)
    }
    defer syslog.Close()
    syslog.Info("This log will be sent to syslog.")
}
运行程序后,检查日志文件或系统日志工具(如journalctl、tail -f app.log)确认输出是否符合预期。
总结:
log包,通过配置输出位置和格式满足基础需求。logrus或zap等库,支持结构化日志、动态级别控制。logrotate实现日志轮转,避免磁盘占用过高。