centos

CentOS Golang日志如何进行权限管理

小樊
34
2025-12-11 17:01:38
栏目: 编程语言

CentOS 上 Golang 日志权限管理实践

一 基本原则与运行身份

二 在 Go 中创建目录与日志文件并设置权限

package main

import (
	"log"
	"os"
)

func main() {
	const (
		logDir  = "/var/log/myapp"
		logFile = "/var/log/myapp/app.log"
	)

	// 1) 创建日志目录(0755)
	if err := os.MkdirAll(logDir, 0755); err != nil {
		log.Fatalf("创建日志目录失败: %v", err)
	}

	// 2) 创建或打开日志文件(0640:仅属主读写,同组只读)
	f, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0640)
	if err != nil {
		log.Fatalf("打开日志文件失败: %v", err)
	}
	defer f.Close()

	// 3) 可选:显式收紧权限(例如仅属主可读写)
	if err := os.Chmod(logFile, 0600); err != nil {
		log.Printf("收紧日志文件权限失败: %v", err)
	}

	// 4) 使用标准库或结构化日志库输出
	logger := log.New(f, "INFO: ", log.Ldate|log.Ltime|log.Lshortfile)
	logger.Println("应用启动")
}

三 使用 logrotate 进行轮转与权限收敛

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 golang-app adm
    sharedscripts
    postrotate
        # 可选:通知应用重新打开日志(如支持 SIGHUP)
        systemctl reload myapp.service >/dev/null 2>&1 || true
    endscript
}

四 安全加固与运维建议

五 常见问题排查

0
看了该问题的人还看了