如何控制Zammad的production.log日志级别并转至Docker日志?
针对你遇到的Zammad production.log 体积快速增长的问题,我分两部分给出具体的实操方案:
一、调整日志级别以减少日志生成量
Zammad基于Rails框架,主要通过两种方式控制日志输出的详细程度:
1. 用环境变量快速配置(Docker部署首选)
在你的Docker配置文件(比如docker-compose.yml)里添加RAILS_LOG_LEVEL环境变量,把默认的info级别调整为warn或error,这样会过滤掉大量非必要的调试、信息类日志:
services: zammad: # 其他容器配置... environment: - RAILS_LOG_LEVEL=warn # 可选值:debug, info, warn, error, fatal, unknown
修改完成后重启Zammad容器,配置立即生效。
2. 修改Zammad核心配置文件(精细控制)
如果需要更个性化的日志规则,可以挂载并编辑Zammad的config/zammad.yml文件,在production区块中指定日志级别:
production: # 其他配置项... log_level: warn
注意:Docker部署时需要将本地修改后的配置文件挂载到容器内的/opt/zammad/config/zammad.yml路径,修改后重启容器即可。
二、将Zammad日志重定向至Docker日志系统
要让Zammad日志纳入Docker的日志管理体系,核心是让Zammad停止写入本地文件,转而将日志输出到容器的标准输出(stdout),Docker会自动捕获这些日志:
1. 开启日志输出到标准输出
在Docker配置中添加RAILS_LOG_TO_STDOUT=true环境变量:
services: zammad: # 其他容器配置... environment: - RAILS_LOG_TO_STDOUT=true
配置生效后,Zammad会停止写入production.log,所有日志都会输出到容器的标准输出,Docker会自动收集这些日志。
2. 配置Docker日志轮转(避免日志堆积)
为了防止Docker日志本身占用过多磁盘空间,可以在配置中设置日志驱动的大小限制,比如在docker-compose.yml中添加:
services: zammad: # 其他容器配置... logging: driver: "json-file" options: max-size: "100m" # 单个日志文件最大100MB max-file: "5" # 最多保留5个轮转日志文件
这样Docker会自动对日志进行切割和清理,无需手动管理。
额外小提示
如果之前的production.log已经占用大量空间,你可以进入容器执行truncate -s 0 /opt/zammad/log/production.log清空文件,或者直接删除该文件(启用日志重定向后这个文件不会再被写入)。
内容的提问来源于stack exchange,提问作者SScholl

