Golang日志文件在CentOS中如何管理
导读:CentOS下Golang日志管理实践 一 总体思路与方案选型 输出目标:优先输出到标准输出/标准错误,由systemd接管并写入journald;或将日志直接写入文件,配合logrotate做轮转与压缩。 轮转策略:在程序内使用lumb...
CentOS下Golang日志管理实践
一 总体思路与方案选型
- 输出目标:优先输出到标准输出/标准错误,由systemd接管并写入journald;或将日志直接写入文件,配合logrotate做轮转与压缩。
- 轮转策略:在程序内使用lumberjack进行按大小滚动,或在系统侧用logrotate按时间/大小滚动,二者可叠加使用(程序内按大小切分,系统侧再做时间归档与清理)。
- 权限与目录:日志目录与文件需确保运行用户(如myapp)具备写权限;建议将日志放在**/var/log/myapp/,并设置合适的属主/属组与权限(如0640)**。
- 集中与检索:使用journalctl查询服务日志;如需检索/可视化,可接入rsyslog转发或ELK等集中式方案。
二 输出到标准输出并用 systemd 管理
- 示例服务文件:/etc/systemd/system/myapp.service
[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
- 常用查看命令:
- 查看服务日志:sudo journalctl -u myapp -f
- 查看本次启动:sudo journalctl -u myapp -b
- 按时间过滤:sudo journalctl -u myapp --since “2025-11-25 00:00:00”
- 说明:将日志输出到stdout/stderr便于journald统一采集、结构化查询与转发。
三 写入文件并用 logrotate 轮转
- 创建日志目录与权限:
sudo mkdir -p /var/log/myapp
sudo chown myapp:myapp /var/log/myapp
sudo chmod 0755 /var/log/myapp
- 创建轮转配置:/etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 myapp myapp
copytruncate
}
- 说明:
- daily/rotate 7/compress:按天轮转并保留7份压缩归档。
- create 0640 myapp myapp:轮转后重建文件并设置权限与属主。
- copytruncate:复制当前日志后截断原文件,避免应用重新打开文件句柄(适合不支持信号重新打开日志的程序)。
- 测试与生效:
- 手动测试:sudo logrotate -f /etc/logrotate.d/myapp
- 验证轮转文件:ls -lh /var/log/myapp/。
四 在程序内使用 lumberjack 进行内置轮转
- 安装依赖:
go get gopkg.in/natefinch/lumberjack.v2
- 示例代码(标准库 log + lumberjack):
package main
import (
"log"
"gopkg.in/natefinch/lumberjack.v2"
)
func main() {
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")
}
- 说明:适合容器化或无 systemd 场景;与系统logrotate可叠加(程序按大小切分,系统侧再做时间归档与清理)。
五 权限与集中式日志方案
- 权限与目录建议:
- 目录:/var/log/myapp,权限0755,属主myapp:myapp。
- 文件:权限0640,属主myapp:myapp,避免过宽权限(如0666)。
- 集中式日志:
- 使用rsyslog将日志写入文件或转发至远程日志中心;编辑**/etc/rsyslog.conf启用UDP/TCP 514**并重启服务。
- 结构化日志可用logrus/zap输出JSON,便于ELK(Elasticsearch、Logstash、Kibana)或Splunk采集分析。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Golang日志文件在CentOS中如何管理
本文地址: https://pptw.com/jishu/756709.html
