温馨提示×

debian golang日志如何配置

小樊
40
2026-09-19 07:45:42
栏目: 编程语言

在 Debian 系统上配置 Golang 日志,通常分为三种层次:

  1. Go 标准库 log 配置
  2. 使用第三方日志库(如 zap / logrus)
  3. 系统级日志(systemd / rsyslog)

下面按常见场景说明。


一、Go 标准库 log 配置(最基础)

1. 输出到文件

package main

import (
    "log"
    "os"
)

func main() {
    f, err := os.OpenFile("/var/log/myapp.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("hello debian log")
}

2. 同时输出到控制台和文件

log.SetOutput(io.MultiWriter(os.Stdout, f))

二、使用 zap(推荐,生产环境)

安装

go get go.uber.org/zap

示例(写文件 + 自动切割)

package main

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

func main() {
    w := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "/var/log/myapp.log",
        MaxSize:    10, // MB
        MaxBackups: 5,
        MaxAge:     7, // days
    })

    core := zapcore.NewCore(
        zapcore.JSONEncoder(zap.NewProductionEncoderConfig()),
        w,
        zap.InfoLevel,
    )

    logger := zap.New(core)
    defer logger.Sync()

    logger.Info("hello zap log")
}

需要安装:

go get gopkg.in/natefinch/lumberjack.v2

三、Debian 系统级日志(systemd)

1. 使用 systemd 管理 Go 程序

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

[Service]
ExecStart=/opt/myapp/myapp
WorkingDirectory=/opt/myapp
User=www-data
Restart=always
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2. 查看日志

sudo journalctl -u myapp -f

✅ 优点

  • 自动日志管理
  • 支持日志轮转
  • 无需自己写文件逻辑

四、rsyslog(传统方式)

Go 日志写入 syslog

import "log/syslog"

logger, _ := syslog.New(syslog.LOG_INFO, "myapp")
logger.Info("hello syslog")

rsyslog 配置

sudo nano /etc/rsyslog.d/myapp.conf
if ($programname == "myapp") then {
    action(type="omfile" file="/var/log/myapp.log")
}
sudo systemctl restart rsyslog

五、推荐方案(总结)

场景 推荐
学习 / 小工具 log
生产服务 zap + lumberjack
Debian 服务 systemd + journalctl
传统系统 rsyslog

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

  • 是 命令行程序 还是 Web 服务
  • 是否使用 systemd
  • 是否需要 日志切割 / 级别控制

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

0 踩