maxlevelstore 参数控制写入磁盘的日志最低优先级(0–7),仅等于或高于该级别的日志持久化保存,低级别日志仅驻留内存、重启丢失;需在 /etc/systemd/journald.conf 中配置并发送 sigusr1 重载。

Systemd-journald 的 MaxLevelStore 参数用于控制**写入磁盘(即持久化存储)的日志最低优先级**,它不改变内存中日志的记录行为,只决定哪些日志条目会被实际保存到 /var/log/journal/ 下。简单说:级别低于该值的日志仍会进入 journal(如通过 journalctl 实时查看),但**不会落盘**,重启后即丢失。
理解日志级别与 MaxLevelStore 的取值逻辑
systemd 日志级别从 0(emerg)到 7(debug),数值越小,优先级越高:
- 0 = emerg(系统不可用)
- 1 = alert(必须立即处理)
- 2 = crit(关键错误)
- 3 = err(普通错误)
- 4 = warning
- 5 = notice
- 6 = info
- 7 = debug
MaxLevelStore= 接收一个整数(0–7),表示“仅将等于或高于该级别的日志写入磁盘”。例如:
-
MaxLevelStore=3→ 只落盘err、crit、alert、emerg级别日志(即 0–3) -
MaxLevelStore=5→ 落盘notice及以上(0–5),但info和debug不落盘 -
MaxLevelStore=7→ 所有级别都落盘(默认行为)
配置 MaxLevelStore 的正确方式
该参数需在 journald 配置文件中设置,不能运行时动态修改:
- 编辑
/etc/systemd/journald.conf - 取消注释或添加行:
MaxLevelStore=3(按需替换为你的目标级别) - 保存后执行:
sudo systemctl kill --signal=SIGUSR1 systemd-journald(重载配置并刷新 journal 状态) - 注意:无需 restart journald,
SIGUSR1即可触发配置重读和 journal 文件切换
验证是否生效:sudo journalctl --disk-usage 查看磁盘日志体积变化;再用 journalctl -p debug -n 10 和 journalctl -p debug -n 10 --all 对比,确认 debug 级别日志在重启后是否消失(未落盘)。
配合其他参数实现精细日志策略
MaxLevelStore 常与以下参数协同使用:
-
MaxLevelSyslog=:控制转发给传统 syslog 守护进程(如 rsyslog)的日志级别 -
MaxLevelKMsg=:控制写入/dev/kmsg的内核日志级别 -
Storage=必须设为persistent或auto(默认),否则日志根本不会落盘,MaxLevelStore失效 -
SystemMaxUse=/SystemMaxFileSize=:限制磁盘日志总大小,避免低级别日志意外占满空间
例如,生产环境常见组合:
Storage=persistent MaxLevelStore=3 SystemMaxUse=512M SystemMaxFileSize=64M
注意事项与典型误区
容易混淆的点:
- 它不影响
journalctl -o json或--no-pager的实时输出——所有日志仍在内存 journal 缓冲区中,只是不刷盘 - 它不替代
RateLimitIntervalSec或RateLimitBurst,后者是限流,这是落盘过滤 - 若已存在大量低级别历史日志(如 debug),修改
MaxLevelStore后它们仍保留在磁盘上,需手动清理:sudo journalctl --vacuum-size=100M或--vacuum-time=2weeks - 容器或用户 session 日志受
UserMaxLevelStore控制(在/etc/systemd/journald.conf.d/*.conf中配置),与系统级独立










