如何阻止Cloud Run的nginx alpine容器输出Notice级别日志
问题根因
- 你此前修改的是nginx输出到本地文件的日志级别,但标准nginx alpine镜像默认会将启动阶段的notice日志直接输出到容器标准错误流(stderr),这部分日志不受
/var/log/nginx/error.log对应的日志级别配置控制 - Google Cloud Run会默认捕获容器所有stdout、stderr输出并上报到Cloud Logging,因此即使本地运行容器看不到这些日志,在Cloud Run环境下依然会被收集。
可行解决方案
方案1:直接指定stderr日志级别(最推荐)
直接在nginx全局配置中指定标准错误流的日志级别为warn,修改nginx.conf全局块(events块外层)配置即可:
error_log stderr warn; # 注释掉原有指向本地文件的error_log配置即可
也可以直接修改Dockerfile的启动命令,无需调整配置文件:
CMD ["nginx", "-g", "daemon off; error_log stderr warn;"]
该方案不会影响正常warn、error级别的日志上报,同时完全过滤掉启动notice日志。
方案2:启动时过滤notice日志
如果需要保留原有文件日志配置,可在启动命令中增加日志过滤逻辑,直接丢弃notice级别的输出:
CMD nginx -g 'daemon off;' 2>&1 | grep -v "^\[notice\]" > /proc/1/fd/1 2>&1
内容的提问来源于stack exchange,提问作者James Valentine
相关产品推荐
相关产品推荐

