温馨提示×

debian下golang日志如何配置

小樊
42
2026-09-28 08:42:50
栏目: 编程语言

在 Debian 下配置 Golang 日志,通常分为**系统层面(运行方式)和应用层面(代码/库)**两部分。下面从常见场景给你一个完整说明。


一、Golang 应用内日志配置(代码层)

1. 使用标准库 log

最简单方式:

package main

import (
    "log"
    "os"
)

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

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

    log.Println("service started")
}

✅ 适合简单服务
❌ 功能较弱(无级别、无轮转)


2. 使用 logrus(推荐)

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

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

    log.Info("hello from debian")
}

常用输出:

  • stdout(配合 systemd)
  • 文件
  • 远程(ELK / Loki)

3. 使用 zap(高性能)

go get go.uber.org/zap
logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("started")

二、Debian 下日志文件位置建议

类型 路径
系统服务 /var/log/<app>/
用户程序 ~/logs/
systemd journalctl

示例:

sudo mkdir /var/log/myapp
sudo chown myuser:myuser /var/log/myapp

三、配合 systemd(Debian 主流方式)

1. 编写 service 文件

/etc/systemd/system/myapp.service

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

[Service]
User=myuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/myapp
Restart=always
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

✅ 推荐:Go 程序输出到 stdout,由 systemd 管理日志


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

使用 logrotate

/etc/logrotate.d/myapp

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

测试:

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

五、常见最佳实践(Debian + Go)

✅ 生产环境:

  • 输出 JSON 日志
  • 输出到 stdout
  • 使用 systemd + journald
  • 使用 logrotate 或 journald 自动轮转

✅ 调试环境:

  • 输出到文件
  • 使用 logrus / zap

六、如果你愿意,我可以帮你

  • 写完整 systemd 示例
  • 配置 ELK / Loki
  • 给你一个生产级 Go 日志模板

只需要告诉我:你是开发环境还是生产环境?

0 踩