使用 Logrotate 在每次输入后截断日志文件或清除最后‘n’个条目

使用 Logrotate 在每次输入后截断日志文件或清除最后‘n’个条目

我已经创建了一个 logrotate 配置文件:

touch /etc/logrotate.d/.test

配置如下:

/home/myUser/test*.log{
    size 0
    hourly
    rotate 0    
    nocreate
    nocompress
    missingok
    nocopytruncate
    ifempty
}

我希望能够在每次输入后清除文件(阻止日志文件)或在某些日志文件中清除最后“n”个条目。实际上,我想继续这样做:

truncate -s 0 /home/myUser/test*.log

照这样,nocopytruncate删除日志文件。如果我把copytruncate它放进去,它会为每个日志“test*.log.1”创建第二个日志,忽略rotate 0。如果我执行下面的命令,它什么也不做,忽略size 0

echo "hello" >> ~/test1.log
cat ~/test1.log
  //output: hello

感觉使用 不起作用size。要使其工作,我需要执行 :

logrotate -f .test

难道我做错了什么?

是否可以通过使用 logrotate 来实现这一点并以某种方式隐藏配置文件(原样)?

至于第二部分清除最后‘n’个条目,我不知道如何使用 logrotate 来做到这一点。

答案1

而不是使用 logrotate。

我只会做这样的事:

ln -s /dev/null /home/myUser/test.log

这将导致所有日志数据进入空设备。

但日志记录很有用,通常你不应该直接丢弃它。大多数应用程序允许你修改它们记录的量和记录到的位置。我会先使用这些方法,然后再直接丢弃它们。

答案2

我不知道它是否适合您的项目,但是......您是否考虑过使用rotatelogs来自 apache httpd 项目的工具?

基本上,您只需将输出发送到 stdout,然后将其通过管道传输到 rotatelogs。它会将您的日志很好地组织在一个文件夹中,并且您可以在日志文件超过某个阈值后对其进行轮换。

您可以在这里阅读更多内容:

https://httpd.apache.org/docs/2.4/programs/rotatelogs.html

相关内容