温馨提示×

Debian Golang日志怎么配置

小樊
33
2026-08-11 21:16:49
栏目: 编程语言

在 Debian 上配置 Golang 日志,通常取决于你使用的是 标准库 log第三方日志库(如 logrus、zap、zerolog),还是 系统级日志(syslog/journald)。下面按常见场景给你一个完整说明。


一、使用 Go 标准库 log

1️⃣ 基本使用

package main

import (
    "log"
    "os"
)

func main() {
    log.SetOutput(os.Stdout)
    log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile)

    log.Println("hello debian")
}

2️⃣ 输出到文件

f, err := os.OpenFile("/var/log/myapp.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
    panic(err)
}
defer f.Close()

log.SetOutput(f)
log.Println("log to file")

⚠️ Debian 注意:

  • /var/log/ 需要 root 权限
  • 建议日志目录:/var/log/myapp/

二、使用 systemd + journald(推荐 Debian 11+)

如果你用 systemd 管理服务,这是最推荐的方式。

1️⃣ 让 Go 程序输出到 stdout

log.SetOutput(os.Stdout)

2️⃣ 配置 systemd service

# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App
After=network.target

[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

3️⃣ 查看日志

journalctl -u myapp.service -f

✅ 优点:

  • 自动轮转
  • 无需手动管理日志文件
  • 支持结构化日志

三、使用 syslog(传统方式)

1️⃣ 安装 syslog

Debian 默认可能使用 rsyslog

sudo apt install rsyslog
sudo systemctl enable rsyslog

2️⃣ Go 使用 syslog

import (
    "log"
    "log/syslog"
)

func main() {
    logger, err := syslog.New(syslog.LOG_INFO|syslog.LOG_DAEMON, "myapp")
    if err != nil {
        panic(err)
    }
    log.SetOutput(logger)
    log.Println("hello syslog")
}

3️⃣ 查看日志

tail -f /var/log/syslog

四、使用第三方日志库(推荐生产环境)

✅ logrus(常用)

import (
    "github.com/sirupsen/logrus"
    "os"
)

func main() {
    log := logrus.New()
    log.SetOutput(os.Stdout)
    log.SetFormatter(&logrus.JSONFormatter{})

    log.WithFields(logrus.Fields{
        "module": "main",
    }).Info("hello logrus")
}

✅ zap(高性能)

import "go.uber.org/zap"

func main() {
    logger, _ := zap.NewProduction()
    defer logger.Sync()

    logger.Info("hello zap",
        zap.String("env", "debian"),
    )
}

五、日志轮转(非常重要)

使用 logrotate

sudo apt install logrotate

示例配置:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

六、推荐方案总结

场景 推荐方案
systemd 服务 stdout + journald
传统服务器 log + 文件 + logrotate
高并发服务 zap / zerolog
简单脚本 标准库 log

如果你愿意,可以告诉我:

  • ✅ 是否使用 systemd
  • ✅ 是否为 Web 服务 / 后台服务
  • ✅ 是否需要 JSON 日志

我可以帮你给出 完整可运行的 Debian + Go 日志配置示例

0