Обновление
Я создал драгоценный камень, основанный на решении ниже, под названием multi_logger . Просто сделайте это в инициализаторе:
MultiLogger.add_logger('post')
и звоните
Rails.logger.post.error('hi')
# or call logger.post.error('hi') if it is accessible.
и все готово.
Если вы хотите написать код самостоятельно, см. Ниже:
Более полное решение было бы разместить следующее в вашем каталоге lib/
или config/initializers/
.
Преимущество состоит в том, что вы можете настроить форматер так, чтобы он автоматически добавлял метки времени или серьезность к журналам. Это доступно из любой точки Rails и выглядит более аккуратно, если использовать шаблон синглтона.
# Custom Post logger
require 'singleton'
class PostLogger < Logger
include Singleton
def initialize
super(Rails.root.join('log/post_error.log'))
self.formatter = formatter()
self
end
# Optional, but good for prefixing timestamps automatically
def formatter
Proc.new{|severity, time, progname, msg|
formatted_severity = sprintf("%-5s",severity.to_s)
formatted_time = time.strftime("%Y-%m-%d %H:%M:%S")
"[#{formatted_severity} #{formatted_time} #{$$}] #{msg.to_s.strip}\n"
}
end
class << self
delegate :error, :debug, :fatal, :info, :warn, :add, :log, :to => :instance
end
end
PostLogger.error('hi')
# [ERROR 2012-09-12 10:40:15] hi