pとかputsとかによるデバッグだとRadRailsのコンソールで文字化ける@Rails

※開発環境はWindowsXP+RadRails, Rails自体は2.0

アクションの処理をデバッグするときとか、pとかputsとかでRadRailsのConsoleビューに表示させてるんですが、今日どうやらConsoleビューに日本語を出すと文字化けするという現象を確認しました。

http://leno-ig.blogspot.com/

に興味深いロガークラスと対処法があったので試してみたのですが、config.log_pathがどうやらlog/development.logとかで、consoleにでてこない。consoleに出てきてほしい!ファイルをいちいち開くのは面倒くさい。

あとちなみにpやpp, print, putsでデバッグすると不都合なこともあって、うちだとステージング環境と本番をApache2.2+FastCGIで動かしているんですが、その環境だとpやppとか標準出力に出力する系のメソッドを呼ぶと画面が白くなって


Application error
Rails application failed to start properly

ってなります。
なので、

  • 環境がdevelopmentならSTDOUTに出力する
  • 環境が非developmentならログファイルに出力する

っていう風にするのが僕にとってはベストなんですが...
なんかキレイなソリューションがほしい。

追記。

↓こいつらを入れる前にhttp://leno-ig.blogspot.com/のCharsetableLoggerをlibに置く


# controller/application.rb
class ApplicationController < ActionController::Base

# Loggerのログレベルを使えるように(DEBUG, INFO, WARN, ERROR, FATAL, UNKNOWN)
include ActiveSupport::BufferedLogger::Severity

MY_LOGGER = LoggerFactory.create({
:destination => STDOUT,
:level => DEBUG,
:encode => "sjis"
})

def self.mylogger
return MY_LOGGER
end

def mylogger
return self.class.mylogger
end
end


# lib/logger_factory.rb
class LoggerFactory
# クラスメソッドの定義
class << self
# ロガーを作るファクトリメソッド configはHashまたはHashWithIndifferentAccess
def create(config)
case config[:encode]
when "Shift-JIS", "shift-jis", "ShiftJIS", "SJIS", "sjis", "s"
return CharsetableLogger.new(config[:destination], config[:level], "s")
when "EUC-JP", "euc-jp", "EUC", "euc", "e"
return CharsetableLogger.new(config[:destination], config[:level], "e")
when "UTF-8", "utf-8", "UTF8", "utf8", "u"
return CharsetableLogger.new(config[:destination], config[:level], "u")
else
return CharsetableLogger.new(config[:destination], config[:level], "u")
end
end
end
end

っていうプログラムをしこんで、アクションの処理で



mylogger.debug "ほげげ〜"

みたいにしてRadRailsのコンソールにきちんとShift_JISで文字化けせずに日本語を表示させることができました。