lib/mongo/util/logging.rb in mongo-1.5.2 vs lib/mongo/util/logging.rb in mongo-1.6.0

- old
+ new

@@ -1,47 +1,55 @@ module Mongo module Logging + DEBUG_LEVEL = defined?(Logger) ? Logger::DEBUG : 0 + def write_logging_startup_message - log(:warn, "Please note that logging negatively impacts client-side performance. " + + log(:debug, "Please note that logging negatively impacts client-side performance. " + "You should set your logging level no lower than :info in production.") end # Log a message with the given level. def log(level, msg) return unless @logger case level - when :debug then - @logger.debug "MONGODB [DEBUG] #{msg}" - when :warn then - @logger.warn "MONGODB [WARNING] #{msg}" - when :error then - @logger.error "MONGODB [ERROR] #{msg}" when :fatal then @logger.fatal "MONGODB [FATAL] #{msg}" - else + when :error then + @logger.error "MONGODB [ERROR] #{msg}" + when :warn then + @logger.warn "MONGODB [WARNING] #{msg}" + when :info then @logger.info "MONGODB [INFO] #{msg}" + when :debug then + @logger.debug "MONGODB [DEBUG] #{msg}" + else + @logger.debug "MONGODB [DEBUG] #{msg}" end end # Execute the block and log the operation described by name and payload. def instrument(name, payload = {}, &blk) + start_time = Time.now res = yield - log_operation(name, payload) + if @logger && (@logger.level == DEBUG_LEVEL) + log_operation(name, payload, start_time) + end res end protected - def log_operation(name, payload) - @logger ||= nil - return unless @logger - msg = "#{payload[:database]}['#{payload[:collection]}'].#{name}(" - msg += payload.values_at(:selector, :document, :documents, :fields ).compact.map(&:inspect).join(', ') + ")" - msg += ".skip(#{payload[:skip]})" if payload[:skip] - msg += ".limit(#{payload[:limit]})" if payload[:limit] - msg += ".sort(#{payload[:order]})" if payload[:order] - @logger.debug "MONGODB #{msg}" + def log_operation(name, payload, start_time) + msg = "MONGODB " + msg << "(#{((Time.now - start_time) * 1000).to_i}ms) " + msg << "#{payload[:database]}['#{payload[:collection]}'].#{name}(" + msg << payload.values_at(:selector, :document, :documents, :fields ).compact.map(&:inspect).join(', ') + ")" + msg << ".skip(#{payload[:skip]})" if payload[:skip] + msg << ".limit(#{payload[:limit]})" if payload[:limit] + msg << ".sort(#{payload[:order]})" if payload[:order] + + @logger.debug(msg) end end end