除非日志超过一定大小,否则如何根据间隔轮换日志?

除非日志超过一定大小,否则如何根据间隔轮换日志?

来自 logrotate 的手册页:

最小尺寸 尺寸
当日志文件的大小超过 size 字节时,会进行轮转,但不会早于额外指定的时间间隔(每日、每周、每月或每年)。相关的 size 选项类似,只是它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。使用 minsize 时,会同时考虑日志文件的大小和时间戳。

尺寸 尺寸
当日志文件的大小超过 size 字节时,它们将被轮换。如果 size 后面跟着 k,则大小将以千字节为单位。如果使用 M,则大小将以兆字节为单位;如果使用 G,则大小将以千兆字节为单位。因此,size 100、size 100k、size 100M 和 size 100G 都是有效的。

我设置尺寸作为500 万间隔作为每周认为日志将按周轮换,如果日志大小超过 5M,则会发生额外的轮换。但实际情况是,除非日志超过 5M,否则不会轮换,这似乎就是最小尺寸是应该做的。

我对手册的理解有误吗?如果日志超过 5M,我该如何让日志每周轮换一次?

编辑:

我不确定以下信息是否相关,但仅作为补充:

我使用 rsyslog 进行消息、安全、cron、maillog、启动的主要日志记录。以下是倒数第二个日志的轮换日期和文件大小,其中大小和间隔设置如上所述:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

正如所见,只有消息被轮换。

编辑2:

我应该咨询一下man logrotate。他们实际上升级了最大尺寸选项。这应该是我所寻找的:

最大尺寸 尺寸
如果日志文件的大小超过 size 字节,甚至在额外指定的时间间隔(每日、每周、每月或每年)之前,就会进行轮转。相关的 size 选项类似,只不过它与时间间隔选项互斥,并且会导致日志文件轮转而不考虑上次轮转时间。使用 maxsize 时,会同时考虑日志文件的大小和时间戳。

答案1

这里回答了一些问题: 每日日志轮换及其大小?

通常logrotate每天只运行一次,因此大小限制不会得到完全遵守。logrotate的状态文件(可能/var/lib/logrotate.status)仅存储日期(而不是时间),它不打算更频繁地使用,因此您不能更频繁地轮换文件(更新:版本 3.85 添加每小时支持,并在状态文件中存储完整的时间戳。)

你没说syslogd你用的是哪一个,rsyslog系统日志工具支持基于自我管理大小的轮换,因此您应该能够按大小轮换它们,并logrotate每周轮换一次(尽管可能需要对文件命名进行一些思考,以确保同时进行文件轮换不会意外删除某些内容)。

另一个选项是使用管道日志,就像 Apache 一样,事实上 Apache-2.4rotatelogs 完全支持此功能(以前的版本仅支持独立的大小或时间)。您没有说明日志来自何处,但您可能能够记录到管道或 fifo,并使用(rotatelogs如果支持的话)。

对于logrotate<= v3.8.0,支持的三种场景是:

  1. size 按大小轮换,每天最多一次,无论经过多长时间
  2. 按时间段无条件旋转(即dailyweeklymonthlyyearly),无论大小
  3. minsize&时间段 如果日志文件大小超过最小大小,则按时间段轮换(`notifempty 是这种情况的特例)

logrotatev3.8.1 增加:

  1. maxsize&时间段 当大小超过最大大小时,或者经过一段时间后,进行旋转。logrotate在这种情况下,可能需要每天运行一次以上默认值。

logrotatev3.8.5 增加:

  1. hourly时间段支持,并在状态文件中存储完整的时间戳。您应该logrotate(至少)每小时运行一次才能使其正常工作。

相关内容