0%

切割日志

一些程序会输出很多的日志,但是都输出到一个文件中。随着文件尺寸越来越大,会占用很多空间。同时超大文件也不便于操作。需要对日志文件做切割。切割日志有很多方案,这里选用logrotate。

程序启动命令

1
nohup lotus daemon >> logs/lotus.log &

让程序在后台运行,并将日志重定向并追加在日志文件之后。把 > 替换成 >> 追加的形式,就可以被logrotate正常切割。

重定向和追加的区别

> 输出重定向:会将原来的文件内容覆盖

>>追加:不会覆盖原来文件的内容,而是追加到文件的尾部

基本语法

  1. ```
    ls -l > a.txt
    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`内容如下:

    /path/to/*.log
    {
    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.1

Here are several alternatives:

  • Give gunzip the --keep option (version 1.6 or later)

    -k --keep

    Keep (don't delete) input files during compression or decompression.
    
    1
    gunzip -k file.gz
  • Pass the file to gunzip as stdin

    1
    gunzip < file.gz > file
  • Use zcat (or, on older systems, gzcat)

    1
    zcat file.gz > file

参考

How To Manage Log Files Using Logrotate In Linux

配置 logrotate 教程

logrotate切割nohup日志大小不变

如何将logrotate与输出重定向一起使用

Unzipping a .gz file without removing the gzipped file