How can I disable MongoDB log messages in console?
Solution 1
This logging is coming from the Ruby Mongo driver. The default logging level seems to be Logger::DEBUG
. Change it to something higher to disable the debug output:
Mongo::Logger.logger.level = Logger::FATAL
To make the driver log to a logfile instead:
Mongo::Logger.logger = Logger.new('mongo.log')
Mongo::Logger.logger.level = Logger::INFO
Note that if you're using the Mongoid ODM, then you may want to adjust logging there too:
Mongoid.logger = Logger.new('mongoid.log')
Mongoid.logger.level = Logger::INFO
For Rails + Mongoid in application.rb
:
config.mongoid.logger = Logger.new(Rails.root + '/log/mongoid.log', :warn)
# ...or change the logging level without a new file destination
config.mongoid.logger.level = Logger::INFO
Solution 2
To disable the debug output for Ruby Mongo Driver(mongoid) we can add it specific environment file as
config.mongoid.logger.level = Logger::INFO
Related videos on Youtube
raulmarcosl
Updated on June 06, 2022Comments
-
raulmarcosl about 2 years
I have this little test script:
require 'mongo' mongo_client = Mongo::Client.new(['127.0.0.1:27017'], :database => 'test') mongo_client[:collection].insert_one({a: 1})
An this is the console output:
$ ruby test.rb D, [2015-05-17T21:12:05.504986 #25257] DEBUG -- : MONGODB | Adding 127.0.0.1:27017 to the cluster. | runtime: 0.0212ms D, [2015-05-17T21:12:05.531238 #25257] DEBUG -- : MONGODB | COMMAND | namespace=admin.$cmd selector={:ismaster=>1} flags=[] limit=-1 skip=0 project=nil | runtime: 24.5481ms D, [2015-05-17T21:12:05.554532 #25257] DEBUG -- : MONGODB | COMMAND | namespace=test.$cmd selector={:insert=>"collection", :documents=>[{:a=>1, :_id=><BSON::ObjectId:0x21935660 data=5558e80553657262a9000000>}], :writeConcern=>{:w=>1}, :ordered=>true} flags=[] limit=-1 skip=0 project=nil | runtime: 21.1718ms
I want to disable those log messages, I don't want a dirty STDOUT. I didn't found any option for this in the ruby driver, and also I've tried to edit
/etc/mongod.conf
with these directives (but it didn't fix it):verbose = false diaglog = 0
Any idea? I don't know what else I can try!
-
Ibraheem Ahmed almost 4 yearsFor future visitors, if you want beautiful colored logging similar to active record, you might want to look at the mongo beautiful logger gem
-
-
Ekkstein over 7 yearsThis didn't disable queries from being logged in my console. Adding Mongoid.logger.level = Logger::INFO did the trick.
-
Prabhakar almost 7 yearsThat didn't work for me on Mongoid 6. This is what worked when I put it in application.rb Mongoid::Config.logger = Logger.new("#{Rails.root}/log/mongo.log")
-
FeifanZ over 6 yearsFor anyone coming here looking for an answer for Rails and Mongoid in general, this may be set in
mongoid.yml
as well: docs.mongodb.com/mongoid/master/tutorials/mongoid-installation -
Simon B. over 6 yearsThe .logger = ... didn't work in Rails 5.1 (mongo 2.5, mongoid 6.2) but
config.mongoid.logger = Logger.new(Rails.root + '/tmp/mongo.log', :warn)
in an development.rb from docs.mongodb.com/mongoid/master/tutorials/mongoid-rails finally cleaned up my console! -
mltsy about 6 yearsNote - To just set the log level in Rails (without changing the destination):
config.mongoid.logger.level = Logger::INFO
-
Ekkstein over 4 yearsRails.root + '/something/something' -> /something/something in rails 6. Remove leading / from the string solved my issue.
-
smtlaissezfaire over 3 yearsFYI
Mongo::Logger.logger.level = Logger::FATAL
also works for newer versions of MongoMapper