我已经创建了一个 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。它会将您的日志很好地组织在一个文件夹中,并且您可以在日志文件超过某个阈值后对其进行轮换。
您可以在这里阅读更多内容: