在 /etc/logrotate.d/
目录下的子配置文件中定义的指令会覆盖(override) /etc/logrotate.conf
中设置的同名全局指令。
可以这样理解优先级:
-
子配置文件指令优先级最高: 如果一个指令在
/etc/logrotate.d/
下的某个应用程序的配置文件中被定义,那么logrotate
在处理该应用程序的日志时,会使用子配置文件中定义的值。 -
主配置文件指令作为默认值:
/etc/logrotate.conf
中定义的指令相当于全局的默认设置。如果某个指令在子配置文件中没有被定义,那么logrotate
会使用主配置文件中设置的值。 -
指令的作用域: 需要注意的是,子配置文件中的指令只对其配置块内指定的日志文件或目录生效,不会影响到其他应用程序的日志轮转行为。
举个例子:
假设 /etc/logrotate.conf
中设置了全局的压缩策略为 compress
和保留 7 个旧日志文件 (rotate 7
)。
现在,在 /etc/logrotate.d/nginx
文件中,你定义了:
/var/log/nginx/*.log {
daily
rotate 3
nocompress
# ... 其他 Nginx 特有的配置 ...
}
那么,对于 Nginx 的日志文件,logrotate
将会:
daily
: 每天进行轮转(覆盖了全局的轮转频率,如果全局设置了weekly
或其他)。rotate 3
: 只保留最近 3 个轮转后的日志文件(覆盖了全局的rotate 7
)。nocompress
: 不对轮转后的日志文件进行压缩(覆盖了全局的compress
)。- 其他在
/etc/logrotate.d/nginx
中定义的指令(例如postrotate
)仍然会生效。
而对于其他没有在 /etc/logrotate.d/
下定义配置文件的应用程序的日志,或者其配置文件中没有覆盖这些指令的,logrotate
将会使用 /etc/logrotate.conf
中设置的默认的 compress
和 rotate 7
等策略。
这种机制使得系统管理员可以为不同的应用程序设置不同的日志轮转策略,以满足它们各自的需求,同时又可以通过主配置文件设置通用的默认行为,简化整体配置。