Railsでバッチ処理をしていて標準のログとは別のファイルに出力したかったので、バッチ処理のログを別のファイルに出力する方法をまとめておきます。
標準のLoggerでもいいのですがLog4rを使用したので、Gemfile
に下記を追加します。
Gemfile
gem 'log4r'
Log4rの初期設定を下記に記述します。
config/initializers/batch_logger.rb
formatter = Log4r::PatternFormatter.new(:pattern => "%d %C [%l]: %M", :date_format => "%Y/%m/%d %H:%M:%S")
if Rails.env == "development"
outputter = Log4r::StdoutOutputter.new(STDOUT, :formatter => formatter)
else
outputter = Log4r::StdoutOutputter.new(File.expand_path("log/batch_log_#{Rails.env}.log", Rails.root), :formatter => formatter)
end
BatchLogger = Log4r::Logger.new("My App")
BatchLogger.add(outputter)
これで、scriptの中でBathLogger.error
やBatchLogger.info
と記述してログに出力します。