每周轮换日志,日志名称中有周数

Rotate logs weekly with a week number in the log's name

我正在设置 logrotate 并想每周轮换一些日志,最好是在星期一,并将它们的名称更改为 example-%year%.w%weeknumber%,其中 %weeknumber% 是给定年份的一周。

通过将类似于 logrotate.cron 的文件添加到 /etc/cron.daily/,我的配置的 logrotate 将每天 运行。我的 logrotate 配置如下所示:

rotate 12
dateext
nocompress

/var/logs/example* {
    weekly
    dateformat .%Y-w%W
}

配置中的%W是基于strftime格式的。但是,运行测试 logrotate -df /etc/logrotate.d/myconf.conf 结果如下:

(...)
considering log /var/logs/example
Creating new state
  Now: 2020-04-23 00:18
  Last rotated at 2020-04-23 00:00
  log needs rotating
rotating log /var/logs/example, log->rotateCount is 12
Converted ' .%Y-w%W' -> '.%Y-w%%W'
dateext suffix '.2020-w%W'
glob pattern '.[0-9][0-9][0-9][0-9]-w%W'
glob finding old rotated logs failed
renaming /var/logs/example to /var/logs/example.2020-w%W
(...)

这意味着,我会用 %W 代替周数。当放置 %U 而不是 %W.

时也会发生同样的情况

我正在使用 logrotate 3.11.0,因为它是我要设置它的机器上 zypper 提供的最新版本。

如何让 logrotate 在重命名日志文件时使用实际周数?

使用 %V 而不是 %U%W 对我有用。

rotate 12
dateext
nocompress

/var/logs/example* {
    weekly
    dateformat .%Y-w%V
}

根据 strftime 的手册页:

%V The ISO 8601 week number (see NOTES) of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the new year. See also %U and %W. (Calculated from tm_year, tm_yday, and tm_wday.)

此外,根据 man entry for 3.11.0(我在问这个问题之前不知何故错过了):

Only %Y %m %d %H %M %S %V and %s specifiers are allowed.

%V 本身是在 3.9.0 中添加的。

虽然这个问题涉及旧版本的 logrotate,但请尽可能使用最新版本。