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
モンキーパッチをあてる。