81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| ==================
 | |
| Logging/Monitoring
 | |
| ==================
 | |
| 
 | |
| It is possible to use `pymongo.monitoring <https://api.mongodb.com/python/current/api/pymongo/monitoring.html>`_ to monitor
 | |
| the driver events (e.g: queries, connections, etc). This can be handy if you want to monitor the queries issued by
 | |
| MongoEngine to the driver.
 | |
| 
 | |
| To use `pymongo.monitoring` with MongoEngine, you need to make sure that you are registering the listeners
 | |
| **before** establishing the database connection (i.e calling `connect`):
 | |
| 
 | |
| The following snippet provides a basic logging of all command events:
 | |
| 
 | |
| .. code-block:: python
 | |
| 
 | |
|     import logging
 | |
|     from pymongo import monitoring
 | |
|     from mongoengine import *
 | |
| 
 | |
|     log = logging.getLogger()
 | |
|     log.setLevel(logging.DEBUG)
 | |
|     logging.basicConfig(level=logging.DEBUG)
 | |
| 
 | |
| 
 | |
|     class CommandLogger(monitoring.CommandListener):
 | |
| 
 | |
|         def started(self, event):
 | |
|             log.debug("Command {0.command_name} with request id "
 | |
|                      "{0.request_id} started on server "
 | |
|                      "{0.connection_id}".format(event))
 | |
| 
 | |
|         def succeeded(self, event):
 | |
|             log.debug("Command {0.command_name} with request id "
 | |
|                      "{0.request_id} on server {0.connection_id} "
 | |
|                      "succeeded in {0.duration_micros} "
 | |
|                      "microseconds".format(event))
 | |
| 
 | |
|         def failed(self, event):
 | |
|             log.debug("Command {0.command_name} with request id "
 | |
|                      "{0.request_id} on server {0.connection_id} "
 | |
|                      "failed in {0.duration_micros} "
 | |
|                      "microseconds".format(event))
 | |
| 
 | |
|     monitoring.register(CommandLogger())
 | |
| 
 | |
| 
 | |
|     class Jedi(Document):
 | |
|         name = StringField()
 | |
| 
 | |
| 
 | |
|     connect()
 | |
| 
 | |
| 
 | |
|     log.info('GO!')
 | |
| 
 | |
|     log.info('Saving an item through MongoEngine...')
 | |
|     Jedi(name='Obi-Wan Kenobii').save()
 | |
| 
 | |
|     log.info('Querying through MongoEngine...')
 | |
|     obiwan = Jedi.objects.first()
 | |
| 
 | |
|     log.info('Updating through MongoEngine...')
 | |
|     obiwan.name = 'Obi-Wan Kenobi'
 | |
|     obiwan.save()
 | |
| 
 | |
| 
 | |
| Executing this prints the following output::
 | |
| 
 | |
|     INFO:root:GO!
 | |
|     INFO:root:Saving an item through MongoEngine...
 | |
|     DEBUG:root:Command insert with request id 1681692777 started on server ('localhost', 27017)
 | |
|     DEBUG:root:Command insert with request id 1681692777 on server ('localhost', 27017) succeeded in 562 microseconds
 | |
|     INFO:root:Querying through MongoEngine...
 | |
|     DEBUG:root:Command find with request id 1714636915 started on server ('localhost', 27017)
 | |
|     DEBUG:root:Command find with request id 1714636915 on server ('localhost', 27017) succeeded in 341 microseconds
 | |
|     INFO:root:Updating through MongoEngine...
 | |
|     DEBUG:root:Command update with request id 1957747793 started on server ('localhost', 27017)
 | |
|     DEBUG:root:Command update with request id 1957747793 on server ('localhost', 27017) succeeded in 455 microseconds
 | |
| 
 | |
| More details can of course be obtained by checking the `event` argument from the `CommandListener`.
 |