温馨提示×

怎么配debian golang日志

小樊
43
2026-10-04 04:44:20
栏目: 编程语言

在 Debian 上配置 Go(Golang)日志,通常可以从**系统环境、日志库选择、日志文件管理(systemd / logrotate)**几个方面来做。下面给你一套比较实用、常见的方案。


一、Debian 上运行 Go 程序的基础环境

1. 安装 Go

sudo apt update
sudo apt install golang-go

或安装官方版本(推荐):

wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz

配置环境:

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/go

二、Go 程序里如何写日志

方案 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.Ldate | log.Ltime | log.Lshortfile)

    log.Println("service started")
}

方案 2:使用 log/slog(Go 1.21+ 推荐)

package main

import (
    "log/slog"
    "os"
)

func main() {
    file, _ := os.OpenFile("/var/log/myapp.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    logger := slog.New(slog.NewJSONHandler(file, nil))
    slog.SetDefault(logger)

    slog.Info("service started", "pid", os.Getpid())
}

方案 3:第三方日志库(更专业)

常用:

  • zap(Uber,性能最好)
  • logrus
  • zerolog

示例(zap):

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

三、Debian 下日志文件管理(重点)

1. 日志放哪里?

推荐:

/var/log/myapp/

创建目录:

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

2. 用 systemd 管理 Go 服务(最推荐)

编写 service 文件

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

[Service]
ExecStart=/usr/local/bin/myapp
WorkingDirectory=/opt/myapp
User=myuser
Restart=on-failure
StandardOutput=append:/var/log/myapp/stdout.log
StandardError=append:/var/log/myapp/stderr.log

[Install]
WantedBy=multi-user.target

启用:

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

查看日志:

journalctl -u myapp -f

3. 用 logrotate 防止日志爆盘

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

测试:

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

四、常见推荐组合(实战建议)

✅ 小型服务

  • log/slog
  • systemd
  • logrotate

✅ 高并发服务

  • zap
  • JSON 日志
  • 接 Loki / ELK

✅ 容器 / K8s

  • 日志直接输出 stdout
  • 不让 Go 写文件

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

  • 是 系统服务 / Docker / K8s
  • 是否需要 JSON 日志
  • 日志要 本地看还是集中收集

我可以直接帮你写一套完整配置。

0 踩