Rails启动后终端无日志输出求助(日志仅写入文件)
Rails 5.2.3终端无法查看日志问题解决
问题根源
从配置和启动日志来看,终端无日志输出的核心原因有三点:
- 启用了
lograge,默认仅将格式化日志输出到文件,而非终端(STDOUT) - 手动配置
config.logger = ActiveSupport::Logger.new(config.paths['log'].first, ...),直接将日志写入文件,未同时输出到终端 - Puma以cluster模式启动(2个worker进程),worker进程的日志无法直接传递到主终端
解决方案
方案1:让日志同时输出到终端和文件
替换config/development.rb中原有config.logger配置:
# 替换原有的config.logger行 logger = ActiveSupport::Logger.new(STDOUT) logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(config.paths['log'].first, 7, 204857600))) config.logger = logger
这段代码会创建同时输出到终端和日志文件的日志实例。
方案2:调整Lograge配置输出到终端
若需保留Lograge的格式化日志,添加终端输出配置:
config.lograge.enabled = true # 配置Lograge输出到终端 lograge_logger = ActiveSupport::Logger.new(STDOUT) # 可选:同时输出到文件 lograge_logger.extend(ActiveSupport::Logger.broadcast(ActiveSupport::Logger.new(config.paths['log'].first, 7, 204857600))) config.lograge.logger = lograge_logger
方案3:关闭Puma Cluster模式
Cluster模式下worker进程日志无法直接显示在主终端,可启动时强制使用单worker:
rails s -w 1
或修改config/puma.rb,将worker数设为1:
workers 1
方案4:开发环境临时关闭Lograge
若不需要Lograge的格式化日志,直接关闭即可恢复默认终端日志:
config.lograge.enabled = false
内容的提问来源于stack exchange,提问作者Paarth Agrawal
相关产品推荐
相关产品推荐

