温馨提示×

golang写日志debian怎设置

小樊
40
2026-10-01 06:45:09
栏目: 编程语言

下面按**“在 Debian 上用 Go 写日志”常见的几种做法给你说明,从简单到生产级**,你可以按需选择。


一、最基础:Go 标准库写日志文件

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.Println("hello debian log")
}

2. Debian 上运行

sudo mkdir -p /var/log/myapp
sudo chown $USER:$USER /var/log/myapp

go run main.go

二、推荐:日志写入 systemd(journalctl)

Debian 10+ 默认用 systemd

Go 代码(直接输出到 stdout/stderr)

log.Println("this is a log")

写成 systemd 服务

sudo nano /etc/systemd/system/myapp.service

内容:

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

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

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp

查看日志:

journalctl -u myapp -f

✅ 优点:自动轮转、权限安全、生产推荐


三、使用第三方日志库(更专业)

1. logrus(最常用)

import "github.com/sirupsen/logrus"

log := logrus.New()
log.SetFormatter(&logrus.JSONFormatter{})
log.SetOutput(os.Stdout)
log.Info("server started")

2. zap(高性能)

logger, _ := zap.NewProduction()
defer logger.Sync()
logger.Info("hello zap")

四、日志轮转(防止文件爆盘)

方法 1:logrotate(Debian 自带)

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

测试:

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

五、常见推荐方案(总结)

场景 推荐方式
学习 / 小工具 标准库 + 文件
生产服务 systemd + journalctl
高并发 zap + systemd
需要文件 zap/logrus + logrotate

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

  • ✅ 是 命令行工具 还是 Web 服务
  • ✅ 是否用 systemd
  • ✅ 是否需要 JSON 日志 / 远程日志

我可以直接给你一套完整可跑的 Debian + Go 日志方案。

0 踩