温馨提示×

golang日志在debian如何配

小樊
40
2026-09-13 01:51:07
栏目: 编程语言

在 Debian 上配置 Go(Golang)日志,一般可以从应用层日志、系统级运行日志、日志轮转三个层面来做。下面按常见场景给你一套实用方案。


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

1. 使用标准库 log

package main

import (
    "log"
    "os"
)

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

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

    log.Println("server started")
}

建议日志目录:

sudo mkdir -p /var/log/myapp
sudo chown -R youruser:youruser /var/log/myapp

2. 使用第三方日志库(推荐)

logrus(经典)

import "github.com/sirupsen/logrus"

log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})

zap(高性能)

import "go.uber.org/zap"

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

二、Go 程序作为系统服务(systemd)

1. 编写 service 文件

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

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

[Install]
WantedBy=multi-user.target

2. 启动服务

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

3. 查看日志

journalctl -u myapp -f

✅ 好处:不用自己管日志文件,systemd + journald 统一管


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

方案 1:logrotate(最常用)

sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    copytruncate
}

测试:

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

方案 2:Go 内建轮转(不依赖系统)

使用 lumberjack

import "gopkg.in/natefinch/lumberjack.v2"

log.SetOutput(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10, // MB
    MaxBackups: 7,
    MaxAge:     30, // days
    Compress:   true,
})

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

最佳实践

  • 日志写文件(/var/log/myapp
  • 使用 lumberjacklogrotate
  • 同时输出到 systemd journal
  • 生产环境用 zap + json

五、常见问题

Debian 没日志?

sudo apt install systemd

权限问题?

sudo chown -R myuser:myuser /var/log/myapp

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

  • Web 服务 / CLI 工具 / 守护进程
  • 是否用 Docker
  • 日志要 本地 / 远端(ELK、Loki)

我可以直接给你一套完整配置模板

0