先说结论:修改 Nacos 服务端 conf 目录下的 logback-nacos.xml,将 RollingPolicy 调整为 SizeAndTimeBasedRollingPolicy,并务必配置包含 %i 索引符的 fileNamePattern,重启服务即可限制单文件体积。
- 适合:磁盘空间有限、日志增长过快导致告警的场景
- 先准备:备份原始配置文件,确认 Nacos 启动方式( standalone/Docker)
- 验收:重启后观察 logs 目录,确认日志文件按大小切割且带有索引后缀
核心配置示例
以下是完整的 RollingFileAppender 配置片段,请替换原文件中对应的 appender 配置。关键点在于 fileNamePattern 必须包含 %d{日期} 和 %i{索引}。
<appender name="nacos" class="ch.qos.logback.core.rolling.RollingFileAppender"
><file>logs/nacos.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"
><!-- 必须包含 %i,否则大小切割不生效 --><fileNamePattern>logs/nacos.%d{yyyy-MM-dd}.%i.log</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>15</maxHistory><totalSizeCap>2GB</totalSizeCap></rollingPolicy><encoder><pattern>%date{yyyy-MM-dd HH:mm:ss} %level [%thread] %logger{36} - %msg%n</pattern></encoder>
</appender>
分步处理
1. 定位配置文件
standalone 部署路径通常为 Nacos 安装目录下的 conf/logback-nacos.xml。Docker 部署需进入容器内部或检查挂载卷路径。
2. 备份原文件
执行以下命令备份,防止配置错误导致服务无法启动:
cd conf cp logback-nacos.xml logback-nacos.xml.bak
3. 修改滚动策略
使用编辑器打开文件,搜索 <appender name="nacos" 或 <appender name="FILE"。找到 rollingPolicy 节点,确保 class 属性为 ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy。
4. 关键配置检查
务必检查 fileNamePattern 是否包含 %i。如果只配置了 %d,日志只会按天切割,不会按大小切割。同时建议添加 totalSizeCap 限制日志总占用空间。
5. 重启服务
Logback 配置在启动时加载,修改后需重启 Nacos 服务端:
sh bin/shutdown.sh sh bin/startup.sh -m standalone
怎么验证是否生效
重启服务产生一定日志后,执行以下命令检查:
# 查看日志文件大小及命名格式 ls -lh logs/nacos*# 检查总占用空间 du -sh logs/
预期结果:应看到类似 nacos.log.2023-10-27.0、nacos.log.2023-10-27.1 的文件,且单个文件大小不超过设定的 maxFileSize(如 50MB)。
常见坑与风险
1. 缺少 %i 索引符
SizeAndTimeBasedRollingPolicy 必须在 fileNamePattern 中包含 %i,否则无法在同一天内生成多个文件,导致大小限制失效。
2. XML 语法错误
logback 配置文件是严格的 XML 格式,标签未闭合或特殊字符未转义会导致启动报错。查看 logs/startup.log 或控制台输出排查 XML 解析错误。
3. 升级被覆盖
直接修改安装包 conf 目录下的文件,在升级 Nacos 版本时会被覆盖。建议记录修改内容,或使用 -Dlogging.config 参数指向外部配置文件,Docker 环境建议挂载外部配置。
4. 权限问题
确保启动 Nacos 的用户对 logs 目录有写权限,否则滚动切割时会因无法重命名文件而失败。
参考来源
- Nacos 官方 GitHub 仓库配置文件结构
- Logback 官方文档 - RollingPolicy
原文链接:https://www.zjcp.cc/ask/11227.html
