debian

Golang日志在Debian如何管理

小樊
40
2025-12-05 04:59:57
栏目: 编程语言

在 Debian 上管理 Golang 日志的实用方案

一 方案总览

二 快速上手 输出到文件并轮转

package main

import (
    "go.uber.org/zap"
    "go.uber.org/zap/zapcore"
    "gopkg.in/natefinch/lumberjack.v2"
)

func main() {
    writer := zapcore.AddSync(&lumberjack.Logger{
        Filename:   "/var/log/myapp.log", // 日志路径(确保目录可写,建议以服务用户运行)
        MaxSize:    100,                 // 单文件上限,单位 MB
        MaxBackups: 7,                   // 保留旧文件个数
        MaxAge:     28,                  // 保留天数
        Compress:   true,                // 是否压缩归档
    })
    cfg := zap.NewProductionEncoderConfig()
    core := zapcore.NewCore(
        zapcore.NewJSONEncoder(cfg), // 生产环境建议 JSON
        writer,
        zap.InfoLevel,
    )
    logger := zap.New(core)
    defer logger.Sync()
    logger.Info("hello, golang log on debian")
}
/var/log/myapp.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 myapp myapp   # 建议与运行服务的用户/组一致
    copytruncate             # 适用于持续写入的文件句柄场景
}

说明:

三 使用 systemd 与 journald 集中管理

# /etc/systemd/system/myapp.service
[Unit]
Description=My Golang Application
After=network.target

[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=myapp
Group=myapp
StandardOutput=journal
StandardError=journal
SyslogIdentifier=myapp

[Install]
WantedBy=multi-user.target

四 集中式日志与监控

五 实践建议

0
看了该问题的人还看了