发布于2026-07-16 阅读(0)
扫一扫,手机访问
### 1. 安装Golang
首先得确保CentOS上装了Golang,这步很简单。如果还没装,直接敲下面这条命令就行:
```bash
sudo yum install golang
```
装完之后可以跑个 `go version` 确认一下,省得后面踩坑。
### 2. 编写Golang应用程序
接下来写一个生成日志的示例程序。代码不复杂,核心就是打开一个日志文件,然后每隔5秒写一条带时间戳的日志。这里给个参考:
```go
package main
import (
"log"
"os"
"time"
)
func main() {
logFile, err := os.OpenFile("app.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
log.Fatalf("error opening log file: %v", err)
}
defer logFile.Close()
log.SetOutput(logFile)
for {
log.Printf("This is a log entry at %s", time.Now().Format(time.RFC3339))
time.Sleep(5 * time.Second)
}
}
```
编译运行后,`app.log` 就会源源不断地增长。如果不加控制,磁盘迟早会被撑爆——所以才有下面这步。
### 3. 使用Logrotate进行日志轮转
CentOS 自带的 `logrotate` 就是干这个活的。先确认它有没有安装:
```bash
sudo yum install logrotate
```
然后为你的应用日志单独创建一个配置文件。比如新建 `/etc/logrotate.d/myapp`:
```bash
sudo nano /etc/logrotate.d/myapp
```
内容如下:
```text
/path/to/your/app.log {
daily
missingok
rotate 7
compress
notifempty
create 640 root root
}
```
简单解释一下每个选项的意思:
- `daily`:每天轮转一次。
- `missingok`:日志文件不存在也不报错,省心。
- `rotate 7`:保留最近7个轮转后的日志文件,再老的就删了。
- `compress`:对旧日志进行gzip压缩,省空间。
- `notifempty`:如果日志文件是空的,就不轮转。
- `create 640 root root`:轮转后新建一个空日志文件,权限640,属主和属组都是root。
配置写好后,最好先手动测一下,看看有没有语法或路径问题。
### 4. 测试Logrotate配置
执行下面这条命令,强制触发一次logrotate:
```bash
sudo logrotate -f /etc/logrotate.conf
```
然后去查看你的日志目录,看看 `app.log` 有没有被重命名成类似 `app.log.1` 并压缩成 `.gz` 文件。如果一切正常,那说明配置OK。
### 5. 设置定时任务(可选)
虽然logrotate本身由系统cron定时调用(通常每天一次),但如果你希望更精确地控制执行时间,或者想手动加一个独立的任务,可以编辑crontab:
```bash
sudo crontab -e
```
添加下面这一行,让它在每天午夜0点运行logrotate:
```text
0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf
```
这样即使系统默认的logrotate任务被修改了,你这边也还有个备选方案。
### 总结
整个过程走下来,你就拥有了一个自动化的Golang日志管理机制:程序写日志 → logrotate每天轮转并压缩 → 保留一周的历史记录。日志文件不会无限膨胀,查看和分析也方便得多。把这些步骤写成脚本固化下来,后续部署新服务时直接复用,效率会高很多。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8