centos

CentOS Golang日志权限如何管理

小樊
41
2025-12-27 10:08:34
栏目: 编程语言

CentOS 上 Golang 日志权限管理

一 核心原则与推荐做法

二 方案一 输出到标准输出并由 systemd 管理

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

[Service]
Type=simple
User=myapp
Group=myapp
ExecStart=/opt/myapp/myapp
StandardOutput=journal
StandardError=journal
Restart=always
WorkingDirectory=/opt/myapp

[Install]
WantedBy=multi-user.target

三 方案二 写入文件并用 logrotate 管理权限与轮转

sudo mkdir -p /var/log/myapp
sudo chown myapp:myapp /var/log/myapp
sudo chmod 0755 /var/log/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
    create 0640 myapp myapp
    copytruncate
}

四 方案三 程序内按大小切分与权限控制

import (
    "log"
    "gopkg.in/natefinch/lumberjack.v2"
)

logger := log.New(&lumberjack.Logger{
    Filename:   "/var/log/myapp/app.log",
    MaxSize:    10,      // 单个文件最大 10MB
    MaxBackups: 7,       // 最多保留 7 个备份
    MaxAge:     28,      // 备份最多保留 28 天
    Compress:   true,    // 启用压缩
}, "", log.LstdFlags)

logger.Println("hello, this is a log message")
import (
    "log"
    "os"
    "syscall"
)

func main() {
    // 目录:root:myapp 750
    if err := os.MkdirAll("/var/log/myapp", 0750); err != nil {
        log.Fatalf("mkdir: %v", err)
    }

    // 文件:myapp:myapp 640
    f, err := os.OpenFile("/var/log/myapp/app.log",
        os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0640)
    if err != nil {
        log.Fatalf("open: %v", err)
    }
    defer f.Close()

    log.SetOutput(f)
    log.Println("secure log init ok")
}

五 安全加固与常见排错

0
看了该问题的人还看了