debian

Golang在Debian上的日志如何配置

小樊
51
2025-08-22 07:10:46
栏目: 编程语言

在Debian上配置Golang日志可按以下步骤进行,可选择标准库或第三方库,结合日志轮转工具实现灵活管理:

一、使用标准库log

  1. 基础配置
    • 设置输出目标(控制台/文件):
      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为例)

  1. 安装库

    go get github.com/sirupsen/logrus
    
  2. 基础配置

    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")
    }
    
    • 优势:支持结构化日志、多种格式(JSON/Text)、日志级别控制,适合复杂场景。

三、日志轮转(防止文件过大)

使用logrotate工具(Debian默认安装):

  1. 创建配置文件/etc/logrotate.d/myapp
    /path/to/app/*.log {
        daily
        rotate 7
        missingok
        compress
        notifempty
        create 0640 root root
    }
    
  2. 生效配置
    sudo systemctl restart logrotate
    
    • 说明:每天轮转一次日志,保留最近7天,压缩旧日志,避免手动管理文件。

四、集成系统日志(可选)

通过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.")
}

五、验证配置

运行程序后,检查日志文件或系统日志工具(如journalctltail -f app.log)确认输出是否符合预期。

总结

0
看了该问题的人还看了