这是我参与「第三届青训营 -后端场」笔记创作活动的第4篇笔记
为什么要做日志轮转
服务运行的时候需要有日志记录,这样在出bug的时候,可以通过日志去查bug的原因。首先日志需要保存到本地,但是如果保存的太大了,在查询的时候会造成io阻塞,或者是我们在查询bug的时候带来不好的阅读体验。所以需要对日志进行切分,我这篇笔记所做的就是每天定时把日志打包。结合我们组所做的抖声项目,就不采用青训营课程中介绍的分布式定时任务,采用的单机定时任务,也就是cron + logorate
步骤
- 编写产生日志文件的程序
- 配置logrotate相关目录和文件
- 验证结果
编写产生日志文件的程序
package main
import (
"log"
"time"
)
func main() {
for {
t := time.Now().Format("2006-01-02 15:04:05")
log.Println(t + ": Log Message")
time.Sleep(time.Second)
}
}
配置logrotate相关目录和文件
[root@nginx log]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# 下面这个是我自己添加的,上面的是自带的配置。
/root/test-log/log/runtime.log {
daily #每天轮转日志
create 0664 root root # 创建新的日志文件时给予文件的权限
rotate 5 #轮转日志的数量 所以最多能保存六天的日志信息 当日的日志+过去5天
}
# system-specific logs may be also be configured here.
验证结果
运行产生日志文件的程序,通过nohup将控制台的输出输入到指定的log文件
nohup go run log.go > log/runtime.log 2>&1 &
log/runtime.log
[root@nginx log]# cat runtime.log
nohup: 忽略输入
2022/06/08 19:48:48 2022-06-08 19:48:48: Log Message
2022/06/08 19:48:49 2022-06-08 19:48:49: Log Message
2022/06/08 19:48:50 2022-06-08 19:48:50: Log Message
2022/06/08 19:48:51 2022-06-08 19:48:51: Log Message
2022/06/08 19:48:52 2022-06-08 19:48:52: Log Message
2022/06/08 19:48:53 2022-06-08 19:48:53: Log Message
2022/06/08 19:48:54 2022-06-08 19:48:54: Log Message
2022/06/08 19:48:55 2022-06-08 19:48:55: Log Message
2022/06/08 19:48:56 2022-06-08 19:48:56: Log Message
2022/06/08 19:48:57 2022-06-08 19:48:57: Log Message
2022/06/08 19:48:58 2022-06-08 19:48:58: Log Message
2022/06/08 19:48:59 2022-06-08 19:48:59: Log Message
2022/06/08 19:49:00 2022-06-08 19:49:00: Log Message
2022/06/08 19:49:01 2022-06-08 19:49:01: Log Message
2022/06/08 19:49:02 2022-06-08 19:49:02: Log Message
强制日志轮转用来测试
logrotate -f /etc/logrotate.conf
自动生成了一个当日的日志文件
[root@nginx log]# ll
总用量 12
-rw-rw-r--. 1 root root 0 6月 8 19:50 runtime.log
-rw-rw-r--. 1 root root 8660 6月 8 19:51 runtime.log-20220608
查看原来的日志 已经记录新的日志了
[root@nginx log]# cat runtime.log
2022/06/08 19:49:18 2022-06-08 19:49:18: Log Message
2022/06/08 19:49:19 2022-06-08 19:49:19: Log Message
2022/06/08 19:49:20 2022-06-08 19:49:20: Log Message
2022/06/08 19:49:21 2022-06-08 19:49:21: Log Message
2022/06/08 19:49:22 2022-06-08 19:49:22: Log Message
2022/06/08 19:49:23 2022-06-08 19:49:23: Log Message
2022/06/08 19:49:24 2022-06-08 19:49:24: Log Message