Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Rails 3 logs with timestamps and PIDs, sort of like syslog
# You must require this file in application.rb, above the Application
# definition, for this to work. For example:
#
# # Syslog-like Rails logs
# if Rails.env.production?
# require File.expand_path('../../lib/better_logger', __FILE__)
# end
#
# module MyApp
# class Application < Rails::Application
require 'active_support/buffered_logger'
class BetterLogger < ActiveSupport::BufferedLogger
SEVERITIES = Severity.constants.sort_by{|c| Severity.const_get(c) }
def add(severity, message = nil, progname = nil, &block)
return if @level > severity
message = (message || (block && block.call) || progname).to_s
# Add timestamp, severity, and pid, kinda like syslog
log = "#{Time.now.to_formatted_s(:db)} #{SEVERITIES[severity]}"
log << " [#{$$}] #{message.gsub(/^\n+/, '')}"
# If a newline is necessary then create a new message ending with a newline.
log << "\n" unless log[-1] == ?\n
buffer << log
auto_flush
message
end
class Railtie < ::Rails::Railtie
initializer "swap in BetterLogger" do
Rails.logger = BetterLogger.new(Rails.application.config.paths.log.first)
ActiveSupport::Dependencies.logger = Rails.logger
Rails.cache.logger = Rails.logger
ActiveSupport.on_load(:active_record) do
ActiveRecord::Base.logger = Rails.logger
end
ActiveSupport.on_load(:action_controller) do
ActionController::Base.logger = Rails.logger
end
ActiveSupport.on_load(:action_mailer) do
ActionMailer::Base.logger = Rails.logger
end
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.