温馨提示×

debian中怎么配golang日志

小樊
35
2026-09-10 03:48:08
栏目: 编程语言

在 Debian 上配置 Go(Golang)日志,通常分为系统层面应用层面两部分。下面按常见场景给你一个清晰、可操作的说明。


一、Go 应用自身日志(代码层面)

Go 标准库自带 log 包,也可以用数学库/第三方库(如 logruszap)。

1. 使用标准库 log(最简单)

package main

import (
    "log"
    "os"
)

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

    log.SetOutput(file)
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    log.Println("application started")
}

2. 使用 logrus(推荐,功能强)

go get github.com/sirupsen/logrus
import "github.com/sirupsen/logrus"

func main() {
    log := logrus.New()
    file, _ := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    log.SetOutput(file)
    log.SetFormatter(&logrus.JSONFormatter{})
    log.Info("hello from logrus")
}

二、Debian 系统日志(systemd / journald)

如果你的 Go 程序通过 systemd 运行(推荐方式),日志可以直接交给 journald。

1. 编写 systemd 服务

sudo vim /etc/systemd/system/myapp.service

内容示例:

[Unit]
Description=My Go App
After=network.target

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=myapp
Restart=on-failure
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2. 重载并启动

sudo systemctl daemon-reexec
sudo systemctl enable myapp
sudo systemctl start myapp

3. 查看日志

journalctl -u myapp -f

✅ 优点:

  • 自动轮转
  • 不用自己写日志文件
  • 支持级别过滤

三、日志轮转(logrotate)

如果你自己写日志文件(非 systemd 日志):

1. 创建 logrotate 配置

sudo vim /etc/logrotate.d/myapp

示例:

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

2. 测试

sudo logrotate -d /etc/logrotate.d/myapp

四、推荐组合(生产环境)

最佳实践

  • Go 程序 → 输出到 stdout/stderr
  • systemd + journald 管理日志
  • 需要文件时再用 logrotate

如果你愿意,我可以:

  • 给你一个 完整的 Go + systemd 示例项目
  • 或针对 Docker / Kubernetes 场景配置日志
  • 或帮你选 zap vs logrus

你现在是开发环境还是服务器部署

0