温馨提示×

如何用debian搭golang日志环境

小樊
43
2026-09-22 09:41:34
栏目: 编程语言

下面给你一个在 Debian 上搭建 Golang 日志环境的实用方案,从系统准备到常见日志库与运行方式,适合新手到生产环境参考。


一、基础环境准备(Debian)

1. 更新系统

sudo apt update
sudo apt upgrade -y

2. 安装 Go

推荐用官方二进制(版本更新快):

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

配置环境变量(写入 ~/.bashrc 或 /etc/profile):

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

验证:

go version

二、Go 项目基础结构

mkdir ~/go-logger && cd ~/go-logger
go mod init go-logger

三、常用 Go 日志方案(推荐)

方案 1:标准库 log(最简单)

适合小型服务

package main

import (
    "log"
    "os"
)

func main() {
    file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    log.SetOutput(file)
    log.SetFlags(log.LstdFlags | log.Lshortfile)

    log.Println("服务启动")
}

方案 2:logrus(结构化日志,推荐)

go get github.com/sirupsen/logrus
package main

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

func main() {
    log := logrus.New()
    file, _ := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
    log.SetOutput(file)
    log.SetFormatter(&logrus.JSONFormatter{})

    log.WithFields(logrus.Fields{
        "module": "main",
    }).Info("服务启动")
}

方案 3:zap(高性能,生产推荐)

go get go.uber.org/zap
package main

import (
    "go.uber.org/zap"
)

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

    logger.Info("服务启动",
        zap.String("env", "debian"),
    )
}

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

使用 logrotate(Debian 原生)

创建配置:

sudo nano /etc/logrotate.d/go-logger

示例:

/home/user/go-logger/app.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    copytruncate
}

测试:

sudo logrotate -d /etc/logrotate.d/go-logger

五、后台运行 + 日志收集

1. 使用 systemd(推荐)

创建服务:

sudo nano /etc/systemd/system/go-logger.service
[Unit]
Description=Go Logger Service
After=network.target

[Service]
User=youruser
WorkingDirectory=/home/youruser/go-logger
ExecStart=/home/youruser/go-logger/app
StandardOutput=append:/var/log/go-logger.log
StandardError=append:/var/log/go-logger.err

[Install]
WantedBy=multi-user.target

启用:

sudo systemctl daemon-reload
sudo systemctl enable go-logger
sudo systemctl start go-logger

查看日志:

journalctl -u go-logger -f

六、进阶建议(生产环境)

  • 日志级别:debug / info / warn / error
  • 日志格式:JSON(方便 ELK / Loki)
  • 中心化:
    • Loki + Promtail
    • ELK(Elasticsearch + Filebeat)
  • 避免:
    • 打印敏感信息
    • 同步写大量日志阻塞主线程

七、最小可用示例总结

Debian
 └─ Go
    ├─ log / logrus / zap
    ├─ logrotate
    └─ systemd

如果你愿意,我可以:

  • 给你一个 完整可运行 Demo
  • 帮你接 Loki / ELK
  • 或针对 Web / 微服务 / CLI 场景定制日志方案

0 踩