Ruby 中如何修改日志级别(Logger)?
Ruby Logger 通过 logger.level = Logger::DEBUG 等常量设置级别;Rails 用 config.log_level。本文给出 Logger 级别表、动态调整与 Rails 配置方法。
Ruby 标准库 Logger:logger.level = Logger::DEBUG(或 INFO/WARN/ERROR/FATAL)——级别以下的日志被过滤。Rails 应用在配置文件中设 config.log_level = :info。
Logger 基本用法
require 'logger'
logger = Logger.new(STDOUT)
logger.level = Logger::WARN # warn/error/fatal/unknown 会输出
logger.debug "看不到" # 被过滤
logger.warn "能看到"
级别从低到高:DEBUG < INFO < WARN < ERROR < FATAL < UNKNOWN。
动态调整
# 保存并恢复实际旧值;共享 logger 的并发调用也会受影响
previous_level = logger.level
begin
logger.level = Logger::DEBUG
# 执行需要诊断的操作
ensure
logger.level = previous_level
end
Rails 配置
# config/environments/production.rb
config.log_level = :info
# 或环境变量驱动
level = ENV.fetch("LOG_LEVEL", "info").downcase
raise "无效 LOG_LEVEL" unless %w[debug info warn error fatal unknown].include?(level)
config.log_level = level.to_sym
常见问题(FAQ)
Q:能给不同模块不同级别吗? 标准 Logger 每实例一级;Rails 可用语义化日志库(如 semantic_logger)按类名分级。
Q:级别字符串转常量? 先校验允许的级别名称,再使用 Logger::Severity.const_get(name.upcase, false);空字符串或不合法名称不能直接当配置接受。