diff --git a/lib/mongo/collection.rb b/lib/mongo/collection.rb index be6718f..0a1b69b 100644 --- a/lib/mongo/collection.rb +++ b/lib/mongo/collection.rb @@ -321,7 +321,7 @@ module Mongo message.put_int(0) message.put_binary(BSON::BSON_CODER.serialize(selector, false, true).to_s) - @connection.instrument( :remove, :database => @db.name, :collection => @name, :selector => selector ) do + @connection.instrument(:remove, :database => @db.name, :collection => @name, :selector => selector) do if safe @connection.send_message_with_safe_check(Mongo::Constants::OP_DELETE, message, @db.name, nil, safe) else @@ -368,7 +368,7 @@ module Mongo message.put_binary(BSON::BSON_CODER.serialize(selector, false, true).to_s) message.put_binary(BSON::BSON_CODER.serialize(document, false, true).to_s) - @connection.instrument( :update, :database => @db.name, :collection => @name, :selector => selector, :document => document ) do + @connection.instrument(:update, :database => @db.name, :collection => @name, :selector => selector, :document => document) do if safe @connection.send_message_with_safe_check(Mongo::Constants::OP_UPDATE, message, @db.name, nil, safe) else @@ -840,7 +840,7 @@ module Mongo end raise InvalidOperation, "Exceded maximum insert size of 16,000,000 bytes" if message.size > 16_000_000 - @connection.instrument( :insert, :database => @db.name, :collection => collection_name, :documents => documents ) do + @connection.instrument(:insert, :database => @db.name, :collection => collection_name, :documents => documents) do if safe @connection.send_message_with_safe_check(Mongo::Constants::OP_INSERT, message, @db.name, nil, safe) else diff --git a/lib/mongo/connection.rb b/lib/mongo/connection.rb index 489145a..cfac20e 100644 --- a/lib/mongo/connection.rb +++ b/lib/mongo/connection.rb @@ -61,7 +61,8 @@ module Mongo # on initialization. # @option opts [Boolean] :slave_ok (false) Must be set to +true+ when connecting # to a single, slave node. - # @option opts [Logger, #debug] :logger (nil) Logger instance to receive driver operation log. + # @option opts [Logger, #debug] :logger (nil) A Logger instance for debugging driver ops. Note that + # logging negatively impacts performance; therefore, it should not be used for high-performance apps. # @option opts [Integer] :pool_size (1) The maximum number of socket connections allowed per # connection pool. Note: this setting is relevant only for multi-threaded applications. # @option opts [Float] :timeout (5.0) When all of the connections a pool are checked out, @@ -534,8 +535,10 @@ module Mongo end end - # execute the block and log the operation as described by name/payload - def instrument( name, payload = {}, &blk ) + # Execute the block and log the operation described by name + # and payload. + # TODO: Not sure if this should take a block. + def instrument(name, payload = {}, &blk) res = yield log_operation(name, payload) res @@ -572,7 +575,12 @@ module Mongo @primary = nil @primary_pool = nil - @logger = opts[:logger] || nil + @logger = opts[:logger] || nil + + if @logger + @logger.debug("MongoDB logging. Please note that logging negatively impacts performance " + + "and should be disabled for high-performance production apps.") + end should_connect = opts.fetch(:connect, true) connect if should_connect @@ -596,7 +604,7 @@ module Mongo ## Logging methods - def log_operation( name, payload ) + def log_operation(name, payload) return unless @logger msg = "#{payload[:database]}['#{payload[:collection]}'].#{name}(" msg += payload.values_at(:selector, :document, :documents, :fields ).compact.map(&:inspect).join(', ') + ")" diff --git a/lib/mongo/cursor.rb b/lib/mongo/cursor.rb index 71a8ea3..b49bc47 100644 --- a/lib/mongo/cursor.rb +++ b/lib/mongo/cursor.rb @@ -378,7 +378,7 @@ module Mongo false else message = construct_query_message - @connection.instrument( :find, instrument_payload ) do + @connection.instrument(:find, instrument_payload) do results, @n_received, @cursor_id = @connection.receive_message( Mongo::Constants::OP_QUERY, message, nil, @socket, @command) @returned += @n_received