温馨提示×

golang在debian如何打日志

小樊
48
2026-10-15 21:35:21
栏目: 编程语言

在 Debian 上用 Go 打日志,常见做法有几类:标准库 log、第三方日志库、系统日志(syslog / journald)、以及容器/服务化场景。下面按使用场景给你一个实用性总结。


一、最基础:使用标准库 log

适合简单程序、脚本、后台服务。

package main

import (
    "log"
    "os"
)

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

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

    log.Println("hello debian log")
}

✅ 优点:无需依赖
❌ 缺点:功能弱(无级别、无轮转)


二、推荐:使用 logrus 或 zap

1️⃣ logrus(易用)

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

func main() {
    logrus.SetFormatter(&logrus.JSONFormatter{})
    logrus.SetLevel(logrus.InfoLevel)

    logrus.WithFields(logrus.Fields{
        "module": "server",
    }).Info("start server")
}

2️⃣ zap(高性能,推荐生产)

import "go.uber.org/zap"

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

    logger.Info("server started",
        zap.String("host", "localhost"),
        zap.Int("port", 8080),
    )
}

三、Debian 系统日志(syslog / journald)

1️⃣ 使用 syslog(传统方式)

import (
    "log"
    "log/syslog"
)

func main() {
    logger, err := syslog.New(syslog.LOG_INFO|syslog.LOG_DAEMON, "myapp")
    if err != nil {
        log.Fatal(err)
    }
    logger.Info("hello from debian")
}

查看日志:

sudo tail -f /var/log/syslog

2️⃣ 使用 systemd journal(推荐 Debian 10+)

如果是 systemd 服务,直接输出到 stdout/stderr 即可:

log.Println("hello journal")

创建服务文件:

# /etc/systemd/system/myapp.service
[Unit]
Description=My Go App

[Service]
ExecStart=/opt/myapp/myapp
User=myapp
Restart=always

[Install]
WantedBy=multi-user.target

查看日志:

journalctl -u myapp -f

✅ 这是 Debian 上最推荐的方式


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

Debian 通常用 logrotate:

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

五、生产环境推荐方案

✅ 最佳组合:

  • Go 程序输出 JSON 日志到 stdout
  • 由 systemd + journald 管理
  • 需要文件时再 journalctl --output=json > file

或:

  • zap + 文件 + logrotate

六、简单选择建议

场景 推荐方式
小工具 log
后台服务 zap + systemd
系统级服务 syslog / journal
容器 stdout + json

如果你能告诉我:

  • 是否是 systemd 服务
  • 是否要 写文件
  • 是否 生产环境

我可以直接给你一套完整模板(含 systemd + logrotate)。

0 踩