Railsのログに関する覚書き

v 2.3.5で確認。

ログの出力方法をいろいろ設定したい

config/environment.rbに記述

# ANSI制御シーケンスをログに出力しない
config.active_record.colorize_logging = false

# ログの出力先を変更
config.log_path=/var/log/appl.log

# ログファイルのローテート
config.logger = Logger.new(config.log_path, 'daily') # 日別
config.logger = Logger.new(config.log_path, 10, 1024 * 1024) # サイズ

ちなみにenvironment.rbでは、ActiveSupportはまだ未ロードなので1.megabytesとかは使えない。

script/consoleで発行されるSQLを確認したい

ActiveRecord::Base.logger = Logger.new(STDOUT)

このコマンドを入力する前にSQLを流してしまうと、Loggerインスタンスが生成されてしまうので
起動直後にやること。

config/initializers/xxx.rbに記述しておくと自動で読み込んでくれる。
でもmigrationの時とかウザイので注意。

自分でロガーを作って別ファイルにログを出力したい

logger ||= ActiveSupport::BufferedLogger.new(File.join(Rails.root, 'log', 'batch.log'))
logger.debug("test message")

ログの出力フォーマットに時間とレベルを出力したい

config/initializers/log_format.rbを追加

ActiveSupport::BufferedLogger.class_eval do
 SEVERITIES = self::Severity.constants.inject({}){ |val, con| val[eval("self::#{con}")] = con; val }
 def add_with_format(severity, message = nil, progname = nil, &block)
   add_without_format(severity, nil) { "%s [%5s] %s" % [Time.now.strftime("%Y/%m/%d %H:%M:%S"), SEVERITIES[severity], message] }
 end
 alias_method_chain :add, :format
end

モンキーパッチをあてる。