I ran into some problems trying to setup a custom logger in rails which I thought I would share to ease someone else's pain. Everything I read said that to setup a custom logger instance, I should set config.logger in my environment.rb, e.g.


config.logger = MyLogger.new(config.log_path)

However, I just could not get this to have any effect! It turns out that this was because I was starting up my server using script/server using mongrel. Using "script/server webrick", or "mongrel_rails start" worked just fine.

I think this is caused by code in the mongrel.rb file that script/server uses which loads just the logging environment (but not my environment) in order to figure out which log file to tail


require 'initializer'

Loading the environment here causes the RAILS_DEFAULT_LOGGER constant to get set, and thus when my config finally gets loaded when mongrel itself starts up, the config.logger I set gets ignored as the rails init code does nothing if RAILS_DEFAULT_LOGGER is set:


def initialize_logger
# if the environment has explicitly defined a logger, use it
return if defined?(RAILS_DEFAULT_LOGGER)

The patch on this bug report seems related, but didn't fix my problem.

I'm too much a rails newb to figure out the right way to patch this, hopefully someone with more of a clue will see this blog entry and submit a patch :)