From 8f59ffce671c9b467b0f97b420305a9faa5214d8 Mon Sep 17 00:00:00 2001 From: "Matthew M. Boedicker" Date: Thu, 13 Dec 2012 23:29:49 -0800 Subject: [PATCH] Do not log the binding values for binary columns. They tend to be large and not very useful in the log. --- activerecord/CHANGELOG.md | 4 ++++ activerecord/lib/active_record/log_subscriber.rb | 12 +++++++++++- activerecord/test/cases/log_subscriber_test.rb | 8 ++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index be3b6564b0..595bf4db72 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,5 +1,9 @@ ## Rails 4.0.0 (unreleased) ## +* Do not log the binding values for binary columns. + + *Matthew M. Boedicker* + * Fix counter cache columns not updated when replacing `has_many :through` associations. diff --git a/activerecord/lib/active_record/log_subscriber.rb b/activerecord/lib/active_record/log_subscriber.rb index ca79950049..11ec2eaf79 100644 --- a/activerecord/lib/active_record/log_subscriber.rb +++ b/activerecord/lib/active_record/log_subscriber.rb @@ -20,6 +20,16 @@ def initialize @odd_or_even = false end + def render_bind(column, value) + if column.type == :binary + rendered_value = "<#{value.bytesize} bytes of binary data>" + else + rendered_value = value + end + + [column.name, rendered_value] + end + def sql(event) self.class.runtime += event.duration return unless logger.debug? @@ -34,7 +44,7 @@ def sql(event) unless (payload[:binds] || []).empty? binds = " " + payload[:binds].map { |col,v| - [col.name, v] + render_bind(col, v) }.inspect end diff --git a/activerecord/test/cases/log_subscriber_test.rb b/activerecord/test/cases/log_subscriber_test.rb index 70d00aecf9..8f42c8ef7b 100644 --- a/activerecord/test/cases/log_subscriber_test.rb +++ b/activerecord/test/cases/log_subscriber_test.rb @@ -1,4 +1,5 @@ require "cases/helper" +require "models/binary" require "models/developer" require "models/post" require "active_support/log_subscriber/test_helper" @@ -100,4 +101,11 @@ def test_cached_queries_doesnt_log_when_level_is_not_debug def test_initializes_runtime Thread.new { assert_equal 0, ActiveRecord::LogSubscriber.runtime }.join end + + def test_binary_data_is_not_logged + Binary.create(:data => 'some binary data') + wait + assert_equal 3, @logger.logged(:debug).size + assert_match(/<16 bytes of binary data>/, @logger.logged(:debug)[-2]) + end end -- GitLab