一些程序会输出很多的日志,但是都输出到一个文件中。随着文件尺寸越来越大,会占用很多空间。同时超大文件也不便于操作。需要对日志文件做切割。切割日志有很多方案,这里选用logrotate。
程序启动命令
1 | nohup lotus daemon >> logs/lotus.log & |
让程序在后台运行,并将日志重定向并追加在日志文件之后。把 > 替换成 >> 追加的形式,就可以被logrotate正常切割。
重定向和追加的区别
>输出重定向:会将原来的文件内容覆盖
>>追加:不会覆盖原来文件的内容,而是追加到文件的尾部基本语法
- ```
ls -l > a.txt/path/to/*.log
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
列表的内容写入文件a.txt(覆盖写)
- 示例:`ls -l > a.txt`
- 说明:`ls -l > a.txt`,将`ls -l`的显示内容**覆盖**写入到a.txt文件,如果文件不存在 ,就创建该文件。
2. `ls -al >> 文件` :列表的内容追加到文件aa.txt的末尾
3. `cat 文件1 > 文件2` :将文件1的内容覆盖到文件2
4. `echo "内容" >> 文件`:将内容 追加到文件中
## logrotate 文件切割
在`/etc/logrotate.d/`下建立一个文件 `/etc/logrotate.d/lotus`内容如下:
{
rotate 10
size 5M
daily
copytruncate
create 664 alpha alpha
missingok
notifempty
compress
delaycompress
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
**rotate** - 限制日志文件轮转的数量。因此,这将只保留最近的 10 个轮转的日志文件。
**size** - logrotate 仅在文件大小等于(或大于)此大小时运行。
**create** - 轮换原始文件并创建具有指定权限、用户和组的新文件。
**compress** - 压缩文件
**delaycompress** - 延迟压缩最近一个文件
**copytruncate** - 🌶️ (有它就能实现文件切割)在创建副本后将原始日志文件截断为零大小,而不是移动旧日志文件和可以选择创建一个新的。它可以在某些程序无法关闭其日志文件时使用,因此可能继续永远写入(追加)上一个日志文件。注意,在复制文件并将其截断,因此某些日志数据可能会丢失。使用此选项时,创建选项将不起作用,因为旧的日志文件仍在原处。
**daily** - 似乎没有小时级别的日志轮转,未确认。这个选项代表按天执行日志轮转
想要立即执行,可以执行`logrotate /etc/logrotate.conf`
## 查看压缩日志文件
```shell
zcat example.log.1.gz > example.log.1Here are several alternatives:
Give
gunzipthe--keepoption (version 1.6 or later)
-k--keepKeep (don't delete) input files during compression or decompression.
1 gunzip -k file.gzPass the file to
gunzipas stdin
1 gunzip < file.gz > fileUse
zcat(or, on older systems,gzcat)
1 zcat file.gz > file